問題タブ [boost-spirit-karma]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - boost::variant への属性のキャスト
ブースト スピリット、フェニックス、およびフュージョン ライブラリの使用方法を学習しているときに、msvc (2015、バージョン 14) およびブースト 1.61.0 でコンパイルされないこの最小限の例に出くわしました。
次に、次のエラー メッセージが表示されます。
エラー C2665: 'boost::detail::variant::make_initializer_node::apply::initializer_node::initialize': 5 つのオーバーロードのどれもすべての引数の型を変換できませんでした
同様の問題がここで報告されていますが、回答が問題にどのように対処するか、およびすべての型が正しく提供されているように見えるのでこれが本当に同じ問題であるかどうかはわかりませんでした (型変換の必要はありません)。
c++ - 実行時エラーのあるカルマ ジェネレーターのデバッグ手法は何ですか?
問題がどこにあるのか実際にはわからないので、私のプログラミングの質問が何であるかを説明するのは簡単ではありません。確かに、ブースト スピリット カルマ ライブラリのどこかにランタイム エラーがありません。ここでデバッグ手法を見逃していると思います。
マクロBOOST_SPIRIT_DEBUG_NODE(S)がパーサーにとって非常に役立つことを確認しましたが、マニュアルには参照が見つかりませんでした。ジェネレーターの場合、これは機能していないようで、(正直なところ) このライブラリのコードを掘り下げて問題がどこにあるかを理解する勇気がありません (そうすべきでしょうか?)。
3 種類のユニオンのような構造を文法で単独で生成しようとしましたが、問題はありませんでした。したがって、エラーは U 構造体のブースト バリアントへのキャストに起因すると考えられます (「属性を boost::variant にキャストする」を参照)。しかし、証拠はありません。
簡単なコード検査で解決できる人のために、私の問題の最小限の例を次に示します。
更新:コンパイラ: Visual C++ Express バージョン 11 および 12。コール スタックは次の場所で停止します。
また、 _SCL_SECURE_NO_WARNINGSマクロの定義により、次のコンパイラ警告が隠されていることがわかりました。
警告 C4996: 'std::_Copy_impl': 安全でない可能性のあるパラメーターを使用した関数呼び出し - この呼び出しは、渡された値が正しいことを確認するために呼び出し元に依存しています。この警告を無効にするには、-D_SCL_SECURE_NO_WARNINGS を使用します。Visual C++ 'Checked Iterators' の使用方法に関するドキュメントを参照してください。
この警告は、いくつかのブーストスピリット ファイルを参照しています。
- 精神\ホーム\カルマ\詳細\output_iterator.hpp(242)
精神\ホーム\カルマ\詳細\output_iterator.hpp(577)
精神\ホーム\カルマ\詳細\output_iterator.hpp(574)
精神\ホーム\カルマ\詳細\ alternative_function.hpp(170)
精神\ホーム\カルマ\詳細\alternative_function.hpp(162)
精神\ホーム\カルマ\オペレーター\alternative.hpp(122)
精神\ホーム\カルマ\補助\attr_cast.hpp(85)
精神\ホーム\カルマ\非ターミナル\詳細\generator_binder.hpp(43)
精神\ホーム\カルマ\非ターミナル\詳細\generator_binder.hpp(52)
精神\ホーム\カルマ\非ターミナル\rule.hpp(193)
精神\ホーム\カルマ\非端末\rule.hpp(230)
c++ - Spirit Qi文法をSpirit Karma文法として再利用することは可能ですか?
入力を解析するために使用する Qi 文法定義があります。後で、入力と同様の方法で出力する Karma ジェネレーターを用意しました。
これはまったく可能ですか?パーサー文法は自動的にジェネレーター文法に変換できるようです (??)。