c++ - 为什么 boost::qi 规则的属性必须用括号声明?

标签 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>

这对我来说更自然。我什至不知道第一个表单将是一个有效的模板实例化,而且我仍然不明白它是怎么回事。

你能解释一下这个技巧吗?

最佳答案

没有任何技巧。属性类型不是 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/

相关文章:

c++ - boost spirit x3 元组构造和隐式 unused_type

c++ - 没有默认构造函数的 Boost-Spirit (X3) 解析

c++ - 将数组的大小设置为从另一个常量除法得出的 const 的值

c++ - boost async_read 与阻塞同步线程 - 性能差异?

c++ - boost::dynamic_properties 和不可变图形对象

c++ - CGAL 错误:计算没有给定点的半空间交集无法编译(boost::none?)

C++:关于 const char* 和 printf 的一些错误

c++ - QWidget 应用程序 w/QML 和注册类型

c++ - 在 C++11 中实现看门狗定时器

c++ - 无法使用 Boost Spirit X3 解析空的 C++ 结构