Nếu tôi có một bảng biểu tượng:Searching/lặp boost :: tinh thần :: khí :: ký
struct MySymbols : symbols<char, MyEnum::Fruits>
{
MySymbols()
: symbols<char, MyEnum::Fruits>(std::string("MySymbols"))
{
add("apple", MyEnum::Apple)
("orange", MyEnum::Orange);
}
};
Tôi muốn để lặp qua bàn để tìm kiếm một biểu tượng của giá trị dữ liệu. Tôi không thể sử dụng biểu thức lambda vì vậy tôi thực hiện một lớp đơn giản:
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;
};
Và tôi đang sử dụng nó như sau:
SymbolSearcher<MyEnum::Fruits> search(ct);
MySymbols symbols;
symbols.for_each(search);
std::string symbolStr = search.found();
Nếu tôi đặt một breakpoint trên _found = s
Tôi có thể khẳng định _found đó là việc thiết tuy nhiên search.found() luôn trả về một chuỗi rỗng. Tôi đoán nó có một cái gì đó để làm với cách functor đang được gọi là bên trong for_each nhưng tôi không biết.
Tôi đang làm gì sai?
nitpick: các biến thành viên nên được đánh vần * _sought * không * _saught * :) – Praetorian