我在代码中发现了一个问题。当我使用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 ++
答案 0 :(得分:3)
boost::is_alpha
用于字符
使用如下: -
cout << boost::algorithm::join_if(players, ", ",
[](const std::string & s){
return boost::all(s,boost::is_alpha());
}) << endl;
显然,你不会得到任何输出' '
players
和boost::alnum()
中的数字。
改为使用{{1}}。