我想在语义操作中使用工厂函数,但我无法使用 phoenix 或 fusion 找到正确的方法。
我的精神气规则看起来像这样:
object = type_identifier >> arg_list;
我想让 Fusion 执行类似的操作:
object = Factory(type_identifier)(arg_list)
而不是使用 BOOST_FUSION_ADAPT_STRUCT
创建包含 type_identifier
和 arg_list
的结构。
这样的事情怎么办?谢谢。
最佳答案
是的。原则上有以下三种方法:
- 依赖公共(public)构造函数
- 使用语义 Action (例如
qi::int_ [ qi::_val = boost::phoenix::construct<type_identifier>(qi::_1) ]
) 使用属性转换特征 [参见 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/