【问题标题】:Why in C++ function boost::algorithm::join_if a std::bad_cast exception is thrown?为什么在 C++ 函数 boost::algorithm::join_if 中抛出 std::bad_cast 异常?
【发布时间】:2013-09-12 04:00:01
【问题描述】:

我在我的代码中发现了一个问题。当我使用 boost::algorithm::join 时,它可以正常工作,但是当我使用 boost::algorithm::join_if 时会抛出 bad_cast。我的代码如下:

#include <iostream>
#include <string>
#include <list>
#include <boost/algorithm/string.hpp>

using namespace std;


main(int argc, char **argv)
{   
    list<string> players;
    players.push_back("ProPlayer98");
    players.push_back("King of Darkness");
    players.push_back("Noob999");
    players.push_back("Daily Queen");

    cout << boost::algorithm::join(players, ", ") << endl; // it works
    cout << boost::algorithm::join_if(players, ", ", boost::is_alpha()) << endl; // bad_cast
}

我的程序的输出是:

ProPlayer98, King of Darkness, Noob999, Daily Queen
terminate called after throwing an instance of 'std::bad_cast'
  what():  std::bad_cast
Abort trap (core dumped)

我曾使用过一些 boost::algorithm 函数来处理文本,但我使用过几次 predicates,但从未发生过类似的问题。

我什至尝试将 const char* 替换为 std::string:

cout << boost::algorithm::join_if(players, string(", "), boost::is_alpha()) << endl;

但问题还是一样。

编辑: 我想要一个也适用于 C++11 之前的 C++ 的解决方案

【问题讨论】:

    标签: c++ join boost string-algorithm


    【解决方案1】:

    boost::is_alpha 用于字符

    使用如下:-

    cout << boost::algorithm::join_if(players, ", ",
                              [](const std::string & s){
                              return boost::all(s,boost::is_alpha()); 
                              }) << endl;
    

    显然,您不会得到任何输出,因为空格 ' ' 和数字出现在 players 中。

    请改用boost::alnum()

    【讨论】:

    • 感谢您的解决方案。感谢您,我在较旧的 C++ 标准中找到了一个解决方案,但它完全不可读: typedef boost::algorithm::detail::is_classifiedF ClassifiedF; join_if(players, "/", boost::bind(boost::all, _1, boost::is_alpha() ));
    • @GrzegorzBazior 很高兴它有帮助!
    猜你喜欢
    • 2012-10-19
    • 2023-03-28
    • 1970-01-01
    • 2013-07-11
    • 2011-04-06
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多