为什么在C ++函数boost :: algorithm :: join_if抛出std :: bad_cast异常?

时间:2013-09-12 04:00:01

标签: c++ join boost string-algorithm

我在代码中发现了一个问题。当我使用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 ++

1 个答案:

答案 0 :(得分:3)

boost::is_alpha用于字符

使用如下: -

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

显然,你不会得到任何输出' ' playersboost::alnum()中的数字。

改为使用{{1}}。