【问题标题】:Can spirit use a Factory instead of ADAPT_STRUCT to process rule?Spirit 可以使用工厂而不是 ADAPT_STRUCT 来处理规则吗?
【发布时间】:2014-07-16 00:37:08
【问题描述】:

我想在语义动作中使用工厂函数,但我无法使用 phoenix 或 fusion 找到正确的配方。

我的灵气法则大概是这样的:

object = type_identifier >> arg_list;

我想让 Fusion 执行以下操作:

object = Factory(type_identifier)(arg_list)

而不是使用BOOST_FUSION_ADAPT_STRUCT 创建一个包含type_identifierarg_list 的结构。

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

【问题讨论】:

  • 如果您提供一个小样本,我们可以帮助您更具体地回答问题

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


【解决方案1】:

是的。原则上有三种方法:

  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;
    

    相应的 trait (assign_to_attribute_from_value&lt;MyType, imt&gt;) 处理分配

【讨论】:

  • transformation_attribute 特质正是我所需要的。 parse_date 示例非常有帮助——但我不知道 grep 是为了什么。非常感谢!
猜你喜欢
  • 2010-09-07
  • 2013-07-10
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多