問題タブ [boost-phoenix]
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::spirit セマンティック アクション: 結果を出力
文法を解析するためにboost::spiritを学習しようとしていますが、ライブラリの使用方法を正確に理解するのに苦労しています.
基本的にパーサーが入力ストリームで「Test」をヒットした場合、戻り値として 5 を出力したいと考えています。(後で、実際には、文字列メンバー「Test」と値メンバー 5 のペアを発行したいと思います。
これが私がこれまでに持っているものです:
main() で:
ただし、コンパイラが次のエラーを出力するため、間違っています。
私の質問は、_val に代入できないのはなぜですか? セマンティックアクションからそのような構造体を発行するにはどうすればよいですか?
編集 最終目標を明確にする必要があるかもしれません。テキスト ファイルをトークン/リテラル値のペアに解析したいと考えています。
よろしくお願いします。
c++ - 名前付き関数を boost::phoenix 式に送信する方法
名前付き関数を引数として別の関数に送信し、引数をフェニックスラムダ式に含める方法がわかりません。
これが私が考えることができる最小限の例です。
is_odd()
関数をfoo()
述語として送信する方法がわかりません。
注:
私の実際のコードでは、述語は実際にはarg1
( arg1
is ofclass Bar
であり、述語として必要ですBar::is_odd
) のメンバー関数です。(arg1->*&Bar::is_odd)()
スタイルを試してみましたが、うまくいきませんでした。簡単にするために、この例にはこれを含めていません。
更新: これは同じコードの C++11 バージョンです。これはうまく機能しますが、C++ 11を使用できないため、phoenixで機能させたいと考えています
c++ - セマンティックアクションからの合成属性値の更新
boost::spirit::qi のフードの下で正確に何が起こるかを理解したいです。数値と加算/減算操作で構成される式を解析および計算する単純なパーサーがあるとします。
qi::_val
セマンティック アクションが行で(1)
どのように発生し、同じ値(2)
を参照するのですか? (3)
boost::phoenix を使用せずに同じ結果を得るにはどうすればよいですか?
から解析された値を受け取る一連のファンクターを作成するqi::double_
必要があると思いますが、それをどうすればよいでしょうか? パーサーの合成値にアクセスするにはどうすればよいですか?
c++ - 融合ベクトル投影
異なるタイプの複数のメンバー データを持つ要素を持つ融合ベクトルがあり、特定のデータ メンバーのみを投影する新しい融合ベクトルを作成したいと考えています。私はすでにしばらくの間これを調べてきましたが、進歩はありません。
c++ - boost::phoenix でコンマの動作が正しくないように見える
フェニックスコード[a()、b()]が与えられた場合、正しい動作はそれぞれa()、次にb()と呼ばれると思いますが、明らかにboost 1.47では2番目の関数のみが呼び出されます。以下のコードを参照してください。
なぜ最初の部分が呼び出されないのですか? それはバグであり、最新のブーストライブラリで修正されていますか?
c++ - フェニックスの値と関数の戻り値の型をブーストする
Boost::Phoenix は初めてで、C++ で FP を実行するために使用しています。私は彼らの公式ページのチュートリアルを調べました。ただし、変数を「保存」する方法を示す例がないのはなぜだろうか。たとえば、値の例では、関数変数を使用するように指示されています
実行結果を直接出力します。変数を保存したい場合はどうすればよいですか? お気に入り
の型はval(3)
何ですか? 遅延関数によって返される関数変数の型を宣言したい場合も同じことが起こります。それの種類は何ですか?チュートリアル全体が常にすぐに出力される理由がわかりません。私はそれを間違って使用していますか?
ありがとう、イー
c++ - ブースト フェニックス make_shared の作成方法
のブーストフェニックスレイジーバリアントを作成することは可能std::make_shared
ですか? つまり、次のようなことを可能にするために
BOOST_PHOENIX_ADAPT_FUNCTION
の可変個引数テンプレートの性質のため、使用できませんstd::make_shared
。したがって、ラッパーを作成できる場合は、おそらくラッパー自体が可変個引数テンプレートである必要があります。