Spirit で自動変数にパーサーを割り当てる際のセグメンテーションフォールトの回避
Spirit パーサーは、本質的に Spirit V2 の自動変数で使用するように設計されていません。これは、基礎となる Proto 式テンプレートが一時変数への参照を維持しているためです。
インライン qi::parse() 式内で auto をパーサーと組み合わせて使用すると、解析が成功します。ただし、パーサーを auto 変数に割り当てて qi::parse() で使用すると、セグメンテーション違反が発生します。
この制限を回避するには、次の代替案を検討してください。
- qi::copy(): Spirit V2 のトランク (boost_1_55_0 および後で)、qi::copy() はパーサーのディープ コピーを作成できます。
-
boost::proto::deep_copy: この関数は Proto 式のディープ コピーを有効にします。
-
BOOST_SPIRIT_AUTO: Spirit V2 のディスカッション フォーラムで紹介されたこのマクロは、次の方法を提供します。
詳細と例については、次のリソースを参照してください:
- [最適化に関連する Spirit V2 qi のバグ] level](https://stackoverflow.com/questions/12011946/spirit-v2-qi-bug-associated-with-optimization-level)
- [自動内の Spirit X3 パーサー変数](https://stackoverflow.com/questions/27979404/spirit-x3-parser-within-auto-variable)
以上が「auto」変数で Spirit パーサーを使用するときにセグメンテーション違反を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。