コードに問題が見つかりました。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 関数を使用したことが あり、 predicateを使用したことはほとんどありませんでしたが、そのような問題は発生しませんでした。
const char* を std::string に置き換えようとさえしました:
cout << boost::algorithm::join_if(players, string(", "), boost::is_alpha()) << endl;
しかし、問題はまだ同じです。
EDIT: C++ 11より古いC++でも機能するソリューションが欲しい