Я нашел проблему в моем коде. Когда я использую boost ::gorith :: join, он работает нормально, но когда я использую boost ::gorith :: 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)
Я использовал несколько раз, чтобы повысить функции алгоритма, чтобы играть с текстом, несколько раз я использовал
предикаты, но ни одна из подобных проблем никогда не возникала.
Я даже пытался заменить const char * на std :: string:
cout << boost::algorithm::join_if(players, string(", "), boost::is_alpha()) << endl;
но проблема все та же.
РЕДАКТИРОВАТЬ:
Я хотел бы решение, которое работает также в C ++ старше, чем C ++ 11
boost::is_alpha
для персонажей
Используйте как следующее: —
cout << boost::algorithm::join_if(players, ", ",
[](const std::string & s){
return boost::all(s,boost::is_alpha());
}) << endl;
Здесь, очевидно, вы не получите никакого вывода в виде пространства ' '
и цифры присутствуют в players
,
использование boost::alnum()
вместо.
Других решений пока нет …