Wenn ich eine Symboltabelle haben:Searching/Iterieren boost :: spirit :: Qi :: Symbole
struct MySymbols : symbols<char, MyEnum::Fruits>
{
MySymbols()
: symbols<char, MyEnum::Fruits>(std::string("MySymbols"))
{
add("apple", MyEnum::Apple)
("orange", MyEnum::Orange);
}
};
Ich möchte über den Tisch, um iterieren für ein Symbol durch den Datenwert zu suchen. Ich kann nicht Lambda-Ausdrücke verwenden, so dass ich eine einfache Klasse implementiert:
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;
};
Und ich verwende es wie folgt:
SymbolSearcher<MyEnum::Fruits> search(ct);
MySymbols symbols;
symbols.for_each(search);
std::string symbolStr = search.found();
Wenn ich einen Haltepunkt auf _found = s
stelle ich, dass _found bestätigen kann eingestellt zu werden , search.found() gibt jedoch immer eine leere Zeichenfolge zurück. Ich vermute, es hat etwas damit zu tun, wie der Funktor innerhalb von for_each aufgerufen wird, aber ich weiß es nicht.
Was mache ich falsch?
nitpick: die Membervariable geschrieben werden soll * _sought * nicht * _saught * :) – Praetorian