join — Почему в C ++ функция boost :: алгоритма :: join_if генерирует исключение std :: bad_cast?

Я нашел проблему в моем коде. Когда я использую 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

2

Решение

boost::is_alpha для персонажей

Используйте как следующее: —

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

Здесь, очевидно, вы не получите никакого вывода в виде пространства ' ' и цифры присутствуют в players,

использование boost::alnum() вместо.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]