在几个问题中,我看到了来自boost.org的Spiritparsing器 – 生成器框架的build议 ,但是在评论中,那些使用Spirit的人感到抱怨并不开心。 请这些人站出来向我们解释使用圣灵有什么缺点或缺点?
问题是在底部粗体,问题也是由蒸馏代码片段总结的。 我试图统一我的types系统(types系统做和从types到string)到一个单一的组件(由Lakos定义)。 我正在使用boost::array , boost::variant和boost::mpl ,以实现此目的。 我希望我的types的parsing器和生成器规则统一在一个变体中。 有一个未定义的types,一个int4(见下文)types和一个int8types。 该变体读作variant<undefined, int4,int8> 。 int4特征: struct rbl_int4_parser_rule_definition { typedef boost::spirit::qi::rule<std::string::iterator, rbl_int4()> rule_type; boost::spirit::qi::int_parser<rbl_int4> parser_int32_t; rule_type rule; rbl_int4_parser_rule_definition() { rule.name("rbl int4 rule"); rule = parser_int32_t; } }; template<> struct rbl_type_parser_rule<rbl_int4> { typedef rbl_int4_parser_rule_definition string_parser; }; 上面的变种开始为未定义,然后我初始化规则。 我有一个问题,这导致了50页的错误,我终于设法追查下来,Variant在赋值时使用operator= ,而boost::spirit::qi::int_parser<>不能赋给另一个(operator = )。 相比之下,我的undefinedtypes没有问题: struct rbl_undefined_parser_rule_definition { typedef boost::spirit::qi::rule<std::string::iterator, void()> rule_type; rule_type […]