私はシンボルテーブルがある場合:探索/反復処理ブースト::精神::チー::シンボル
struct MySymbols : symbols<char, MyEnum::Fruits>
{
MySymbols()
: symbols<char, MyEnum::Fruits>(std::string("MySymbols"))
{
add("apple", MyEnum::Apple)
("orange", MyEnum::Orange);
}
};
私はデータ値によってシンボルを検索するために、テーブルを反復処理したいし。
template<typename T>
struct SymbolSearcher
{
SymbolSearcher::SymbolSearcher(T searchFor)
: _sought(searchFor)
{
// do nothing
}
void operator() (std::basic_string<char> s, T ct)
{
if (_sought == ct)
{
_found = s;
}
}
std::string found() const { return _found; }
private:
T _sought;
std::string _found;
};
そして、次のように私はそれを使用しています:私は単純なクラスを実装するので、私は、ラムダ式を使用することはできません
SymbolSearcher<MyEnum::Fruits> search(ct);
MySymbols symbols;
symbols.for_each(search);
std::string symbolStr = search.found();
を私は_found = s
にブレークポイントを設定した場合、私はその_foundを確認することができますセットを取得していますしかし、search.found()は常に空文字列を返します。私はそれが、functorがfor_eachの中で呼び出されている方法と関係があると推測していますが、わかりません。
私は間違っていますか?
nitpick:メンバ変数が綴られるべき* _sought * * * _saughtない:) – Praetorian