【问题标题】:Why boost::qi rules' attributes must be declared with parenthesis?为什么 boost::qi 规则的属性必须用括号声明?
【发布时间】:2014-02-14 14:51:13
【问题描述】:

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

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

不是这样的

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    这是来自Qi documentation 的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      相关资源
      最近更新 更多