我想知道为什么带有属性的 qi::rule
必须这样声明:
qi::rule<string::iterator, std::string(), ascii:space_type>
不是这样的
qi::rule<string::iterator, std::string, ascii:space_type>
这对我来说更自然。我什至不知道第一个表单将是一个有效的模板实例化,而且我仍然不明白它是怎么回事。
你能解释一下这个技巧吗?
最佳答案
没有任何技巧。属性类型不是 std::string
。这是一个函数,返回 std::string
。因为这本质上就是 Qi 规则(如果你仔细观察的话):它是一个解析一段文本并返回解析值的函数。
这些只是一种可能的属性类型。其他规则接受值,因此是具有参数的函数:
qi::rule<string::iterator, void(std::string), ascii::space_type> end_tag;
这是 Qi documentation 中的示例.
关于c++ - 为什么 boost::qi 规则的属性必须用括号声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21782457/