c++ - 精神可以使用工厂而不是 ADAPT_STRUCT 来处理规则吗?

标签 c++ boost-spirit boost-fusion

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

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

object = type_identifier >> arg_list;

我想让 Fusion 执行类似的操作:

object = Factory(type_identifier)(arg_list)

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

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

最佳答案

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

  1. 依赖公共(public)构造函数
  2. 使用语义 Action (例如 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>)处理分配

关于c++ - 精神可以使用工厂而不是 ADAPT_STRUCT 来处理规则吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24770387/

相关文章:

c++ - 反对 Json 并返回

boost-spirit - 进入提振精神;齐还是X3?

c++ - 拥有超过 64 个成员的 BOOST_FUSION_ADAPT_STRUCT 是怎么回事?

c++ - 嵌套的 Boost 融合结构

c++ - 如何从 spirit 语义规则绑定(bind)/调用存储在 fusion::vector 中的 boost::function?

c++ - 循环不处理字符串的最后一个字符

c++ - 抛出逻辑错误异常或只是在库中中止?

c++ - C++中的数组声明而不指定大小

c++ - boost 变体 : How to model JSON?

c++ - 在 boost spirit 解析器中使用指针作为合成属性