为什么必须用括号声明boost :: qi rules'属性?

时间:2014-02-14 14:51:13

标签: c++ boost boost-spirit boost-spirit-qi

我想知道为什么必须像这样声明具有属性的qi::rule

qi::rule<string::iterator, std::string(), ascii:space_type>

不喜欢这个

qi::rule<string::iterator, std::string, ascii:space_type>

这对我来说更自然。我甚至不知道第一个表单是一个有效的模板实例,我仍然不明白它是如何形成的。

你能解释一下这个伎俩吗?

1 个答案:

答案 0 :(得分:4)

没有诀窍。属性类型为 std::string。这是函数返回 std::string。因为这基本上是一个Qi规则(如果你足够眯眼):它是一个解析一段文本并返回解析值的函数。

这些只是一种可能的属性类型。其他规则接受值,因此是具有参数的函数:

qi::rule<string::iterator, void(std::string), ascii::space_type> end_tag;

这是Qi documentation

中的一个示例