ホームページ >バックエンド開発 >C++ >「auto」変数で Spirit パーサーを使用するときにセグメンテーション違反を回避するにはどうすればよいですか?

「auto」変数で Spirit パーサーを使用するときにセグメンテーション違反を回避するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-05 21:53:151026ブラウズ

How Can I Avoid Segfaults When Using Spirit Parsers with `auto` Variables?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。