1
より多くの精神の狂気-パーサータイプ(ルールと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=割り当て中に使用し、別のバリアントに割り当てるboost::spirit::qi::int_parser<>ことはできません(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 rule"); …