精灵可以使用Factory而不是ADAPT_STRUCT来处理规则吗?

时间:2014-07-16 00:37:08

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

我想在语义动作中使用工厂功能,但我无法使用凤凰或融合找到合适的配方。

我的精神气质规则看起来像:

object = type_identifier >> arg_list;

我希望Fusion能够执行以下操作:

object = Factory(type_identifier)(arg_list)

而非使用BOOST_FUSION_ADAPT_STRUCT创建包含type_identifierarg_list的结构。

这样的事情怎么办?感谢。

1 个答案:

答案 0 :(得分:2)

是。原则上有三种方法:

  1. 依赖公共构造函数
  2. 使用语义操作(例如qi::int_ [ qi::_val = boost::phoenix::construct<type_identifier>(qi::_1) ]
  3. 使用属性转换特征[请参阅文档中的Customization of Spirit's Attribute Handling)。在这种情况下,你只需要

     qi::rule<It, Mytype()> r = qi::_int;
    

    并且相应的特征(assign_to_attribute_from_value<MyType, imt>)处理分配