問題タブ [boost-preprocessor]
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.
preprocessor - プリプロセッサ、ポストプロセッサ、形状プロセッサ、および NC プロセッサ
こんにちはみんな!プリプロセッサ、ポストプロセッサ、ジオメトリック プロセッサ、NC プロセッサという用語の違いを説明できる人はいますか?
c++ - マクロ展開を追跡する
マクロ展開を追跡したい - マクロが展開された回数と、展開が発生したときの引数は何ですか。
例えば、
次のようなマクロがあります。
私のコードでは、次のようなものがあります。
プリプロセッサ展開の最後に (特定のマクロを最後に展開する方法はありますか?)、mymacro が使用された回数と渡された引数を知りたいです。この場合、2 回になり、args は a と b になります。
ブーストプリプロセッサライブラリを調査していました。BOOST_PP_ARRAY がありますが、後で使用できるように「静的」にする方法がわかりません。
BOOST_PP_COUNTER で何かを見つけました。BOOST_PP_COUNTER は、プリプロセッサ フレーズで状態を維持できるもののようです。しかし、私は自分がやりたいことをどうやってやるのかまだはっきりしていません。
c++ - マクロを含むC++メソッド宣言
私はQuickFASTライブラリを使用していますが、それを確認しているときに、実際には取得していないように見えるこのクラス宣言を見つけました。クラス名の前にマクロ名を付けるとはどういう意味ですか?
また、私はこの宣言を見つけました
繰り返しますが、この宣言は使用できません。
詳細については、QuickFAST_Export.hppをご覧ください。
c++ - boost pp と mpl を使用した配列のコンパイル時の初期化
与えられた:
私はコンパイル時にこの種の機能を取得しようとしています:
私はそれが次のようになると思います:
しかし、私はそれを機能させることができません (BOOST_PP_FOR を使用して完全に失敗した試みを投稿しませんでした)。
ObjPair<T1, T2>::Foo
署名の静的メソッドですbool(const obj&, const obj&)
。さまざまな obj タイプに特化しています。
この配列を使用して、オブジェクトのペアが与えられた特定の関数を見つけます。オブジェクトは基本クラスとして保持され、基本クラスで使用可能な ID に基づいてインデックスを決定するために、いくつかの数学で配列にインデックスを付けることができます。
c++ - BOOST_PP_VARIADIC_SIZE が拡張されていません
次のように BOOST_PP_VARIADIC_SIZE をテストしています。
これは、展開後に得られるものです。
しかし、私がこれを行うと:
展開後、次のようになります。
私は Mac OS で最新の clang を使用しています。g++ でも同じ結果が得られます。
ここで何が起こっているのだろうと思います。variadic boost プリプロセッサが正しく展開されない理由。ブースト1.49.0を使用しています
c++ - C++ クラスを登録して、後で関数がすべての登録済みクラスを反復処理できるようにする
実行時に拡張機能を動的にロードするアプリケーションを作成しようとしています。Boost Preprocessor ライブラリを使用して、名前のリストを指定すると、名前ごとにクラスを宣言し (そして、それらすべてを AbstractPlugin クラスのサブクラスにします)、そのクラスを含む Boost MPL シーケンスを宣言するプリプロセッサ関数を作成しました。次に、その MPL シーケンス内のいずれかの型にキャストできる場合、AbstractPlugin へのポインターを試行するクラスを作成しました。ここでの問題は、プリプロセッサ関数が、作成してロードするすべての拡張機能の完全なリストを必要とすることです。各拡張機能を個別のファイルに登録できる手法はありますか?
アップデート:
私の状況説明は漠然としすぎていたと思いますので、より具体的に説明することにしました。
拡張タイプのコレクションを定義したいと思います。拡張子の種類ごとに、任意の数の拡張子が存在する可能性があります。実行時に、プログラムは外部ライブラリをロードし、エントリ ポイント関数を解決して呼び出し、結果としてポインタを取得します。次に、そのポインターをすべての登録済み拡張タイプにキャストしようとします ( を使用dynamic_cast
するため、拡張タイプのクラスはすべてポリモーフィックな基本クラスから継承されます)。拡張型へのキャストが成功した場合、キャストされたポインターは、その拡張型の特別なハンドラーへの呼び出しで使用されます。
拡張機能の種類の数はコンパイル時に認識されます (もちろん、拡張機能の数は無限です)。私のアプローチを使用すると、ローダー クラスはこの知識を使用して、拡張機能の種類ごとにハンドラーが存在するかどうかを確認します (存在しない場合、プログラムはコンパイルされません)。また、私のアプローチでは、拡張タイプのクラスにローダーに関する情報を強制することはありません (したがって、ローダーを変更するのは簡単です)。ただし、各拡張タイプがそれ自体を登録すると、より便利になります。
c++ - ブーストプリプロセッサ-BOOST_PP_ENUM_PARAMSに静的定数intを渡しますか?
私はこのようなものが欲しいです:
コンパイラはこれを好まないようです-私がなりたい場所に到達するための何らかの修正はありますか?
c++ - 連結文字列の可変長マクロを生成するにはどうすればよいですか
ここで行き詰まりました...
c++ - Boost Preprocessorを使用してクラス関数にアクセス可能な関数のリストを取得する方法は?
25 の異なるクラスから継承するクラスがあるとします。私が見ているクラスの親クラス (パブリック) とパブリックおよびプライベートで呼び出すことができる関数シグネチャのリストを取得する方法を知りたいですか? (たとえば、自動化された RPC フレンド クラスの作成の場合) (定義を使用してこれを行う理由: fly= で動作します) 少なくとも、クラスの pub および priv 関数のリストを取得できますか?)
c++ - その前に書かれたプリプロセッサ定義を介して関数シグネチャを取得するにはどうすればよいですか?
関数シグネチャを解析するための定義を作成し、Boostプリプロセッサを使用して次のようなものを作成します。
または少なくとも:
それは生成します:
その定義を持つ関数ごとに。
N
Boost Preprocessorを介して、着信引数および任意の戻り型の関数のそのような定義ラッパーを作成することは可能ですか?