Spirit での解析された式の管理
このクエリでは、Spirit パーサーを auto 変数に割り当てるときに遭遇する課題を調べます。パーサーは qi::parse() で直接使用するとシームレスに機能しますが、パーサーを auto 変数に割り当てて再利用すると問題が発生します。
この動作の中心は、Spirit パーサーの実装方法にあります。 。 Spirit の基礎を形成するプロト式テンプレートは、一時変数への参照を維持します。パーサーが auto 変数に割り当てられると、基礎となる Proto 式も一時パーサーへの参照を確立します。
この問題に対処するために、いくつかのオプションが利用可能です:
例:
namespace qi = boost::spirit::qi; int main() { auto bracketed_z = qi::copy( '[' >> +qi::char_('z') >> ']' ); // Uses qi::copy() string line = "[z]"; auto p = line.cbegin(); printf("%d", qi::parse(p, line.cend(), bracketed_z)); // Now works with auto variable // Alternative using BOOST_SPIRIT_AUTO BOOST_SPIRIT_AUTO(bracketed_z, '[' >> +qi::char_('z') >> ']'); }
これらのアプローチは、パーサーと一時変数の間の参照チェーンを切断することで問題を解決し、自動変数を Spirit で効果的に使用できるようにします。パーサー。
以上が「auto」変数に割り当てられた Spirit パーサーが問題を引き起こすのはなぜですか? 問題を修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。