1
更疯狂的精神-解析器类型(规则vs int_parser <>)和元编程技术
问题在底部以粗体显示,该问题在结尾处也用蒸馏代码片段加以概括。 我正在尝试将我的类型系统(类型系统从类型到字符串,从类型到字符串)统一为一个组件(由Lakos定义)。我正在使用boost::array,boost::variant和boost::mpl,以实现此目的。我想将我的类型的解析器和生成器规则统一在一个变量中。有一个未定义的类型,一个int4(见下文)类型和一个int8类型。变体读取为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页的错误,我终于设法找到了它,operator=在分配期间使用了Variant ,并且boost::spirit::qi::int_parser<>不能将a分配给另一个(operator =)。 相比之下,我的未定义类型没有问题: struct rbl_undefined_parser_rule_definition { typedef boost::spirit::qi::rule<std::string::iterator, void()> rule_type; rule_type rule; rbl_undefined_parser_rule_definition() { rule.name("undefined parse …