【发布时间】:2013-02-12 11:58:58
【问题描述】:
如果我有一个符号表:
struct MySymbols : symbols<char, MyEnum::Fruits>
{
MySymbols ()
: symbols<char, MyEnum::Fruits>(std::string("MySymbols"))
{
add("apple", MyEnum::Apple)
("orange", MyEnum::Orange);
}
};
我想遍历表以便按数据值搜索符号。我不能使用 lambda 表达式,所以我实现了一个简单的类:
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() 总是返回一个空字符串。我猜这与在 for_each 中调用仿函数的方式有关,但我不知道。
我做错了什么?
【问题讨论】:
-
nitpick:成员变量应该拼写为 _sought 而不是 _saught :)
标签: c++ boost boost-spirit boost-spirit-qi