अगर मैं एक प्रतीक तालिका है:खोज/पुनरावृत्ति बढ़ावा :: भावना :: क्यूई :: प्रतीकों
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() हमेशा एक खाली स्ट्रिंग देता है। मैं अनुमान लगा रहा हूं कि इसके लिए फंक्टर को अंदरूनी तरीके से बुलाया जा रहा है, लेकिन मुझे नहीं पता।
मैं क्या गलत कर रहा हूं?
nitpick:: सदस्य चर वर्तनी किया जाना चाहिए * _sought * नहीं * _saught * :) – Praetorian