我想知道为什么必须像这样声明具有属性的qi::rule
:
qi::rule<string::iterator, std::string(), ascii:space_type>
不喜欢这个
qi::rule<string::iterator, std::string, ascii:space_type>
这对我来说更自然。我甚至不知道第一个表单是一个有效的模板实例,我仍然不明白它是如何形成的。
你能解释一下这个伎俩吗?
答案 0 :(得分:4)
没有诀窍。属性类型为不 std::string
。这是函数,返回 std::string
。因为这基本上是一个Qi规则(如果你足够眯眼):它是一个解析一段文本并返回解析值的函数。
这些只是一种可能的属性类型。其他规则接受值,因此是具有参数的函数:
qi::rule<string::iterator, void(std::string), ascii::space_type> end_tag;
中的一个示例