假设我有一个想用灵气解析成的结构,定义如下:
struct data_
{
bool export;
std::wstring name;
data_() : export(false) {}
};
另外,假设结构已经适应了这样的融合:
BOOST_FUSION_ADAPT_STRUCT(
data_,
(bool, export)
(std::wstring, name)
)
相关的规则是:
qi::rule<Iterator, data_(), skipper<Iterator> > rule_data;
rule_data = -lexeme["SpecialText" >> !(alnum | '_')] [ boost::phoenix::at_c<0> = true ] // If this string is found, , set "export" to true
> lexeme["Name" >> !(alnum | '_')] // this is supposed to go into the "name" member
到目前为止,这编译得很好。但是,“名称”现在保持为空!
所以本质上,我在问:鉴于“SpecialText”在“Name”之前,我将如何正确合成“export”的布尔属性,而不是字符串?
编辑 在把头发拉出来之后,我随机偶然发现了“matches []”解析器,它似乎可以满足我的需求。
尽管如此,问题仍然以一般形式存在,例如,如果我想返回某个字符串或其他数据类型而不是 bool。本质上,如何通过语义操作设置结构属性的特定成员。