問題タブ [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.
c++ - BOOST_PP_ITERATE()の結果、「そのようなファイルまたはディレクトリはありません」
ブーストプリプロセッサライブラリを学習していて(使用する必要があるため)、ファイル反復メカニズムを試してみたかったのです。a.cppとb.hppを使用して最小限のプロジェクトを設定しました。私がやろうとしているのは、ブーストppを介してb.hppを何度も含めることです。
コンパイルしようとすると(プリプロセッサの結果を確認するには-Eを使用):
このエラーが発生しました:
a.cppからインクルードされたファイル:/usr/local/include/boost/preprocessor/iteration/detail/iter/forward1.hpp:47:37:エラー:b.hpp:そのようなファイルまたはディレクトリはありません
b.hppは同じディレクトリにあり、何が間違っているのかわかりません。g ++はforward1.hppと同じディレクトリでb.hppを検索しているようですが、ブーストのドキュメントに従うと、私のコードは機能するはずです(私のブーストバージョンは1.44です)。
誰かが同じ問題を経験しましたか?
c++ - boost.preprocessorタプルの要素数を決定する方法は?
boost.preprocessor tuple`sの要素数を決定する方法は?
c - Boostプリプロセッサでの変数と整数定数の混合
プリプロセッサでプリコンパイル計算を行うためにBOOST_PPを使用しています。私は、コードサイズが非常に重要なアプリケーションに焦点を当てています。(したがって、コンパイラーがそうすべきである、または通常そうするべきであるとは言わないでください。コンパイル時に実行されるものと生成されるコードを制御する必要があります)。ただし、整数定数と変数の両方に同じ名前のマクロ/関数を使用できるようにしたいと思います。ささいな例として、私は持つことができます
これは私が望んでいることを行い、
コンパイル時。
でも、
これは前処理する必要があります
もちろん、私は次のような従来のマクロを使用してそうすることができます
しかし、整数定数に対して私が望んでいることは実行されません(コンパイル時にそれらを評価します)。
だから、私の質問は、引数がリテラルか変数かをチェックしてから、異なる定義を使用するトリックがありますか?つまり、次のようなものです。
編集:それで、私が本当に求めているのは、コンパイル時に何かが利用可能な定数であるかどうかを確認する方法です。したがって、BOOST_PP_関数の適切な引数です。これは、ほとんどの人がプリプロセッサや一般的なプログラミングの推奨事項に期待するものとは異なることを理解しています。しかし、プログラミングの間違った方法はありませんので、その哲学に同意できない場合は、質問を嫌いにならないでください。BOOST_PPライブラリが存在するのには理由があり、この質問も同じ精神です。しかし、それは不可能かもしれません。
c++ - ブースト プリプロセッサ: サンプルが機能しない
Boost.Preprocessorライブラリからサンプルをコンパイルしようとしました。
Visual Studio 2008 でエラーが発生するerror C2065: 'b' : undeclared identifier
サンプルに問題がありますか、それとも何か不足していますか??
注意: シーケンス定義自体は問題ありません。これを示すために、次のコードをコンパイルしました。
免責事項: このコードは WTF コードであり、私はこのような BOOST PP を使用するつもりはありません :-)
boost - cmakeを使用してプリプロセッサとしてboost.waveを使用するにはどうすればよいですか?
コンパイラに付属しているプリプロセッサではなく、boost.waveをプリプロセッサとして使用しようとしています。私はこれを達成する方法を理解することができません。
ビルドシステムジェネレーターとしてCMakeを使用していますが、プリプロセッサーがboost.waveであることを指定するにはどうすればよいですか。これは、Windows(MSVC)とLinux(gcc)の両方で機能するはずです。
スタックオーバーフローアーカイブをグーグルで検索しても答えは得られませんでした
コンパイラはとにかくファイルを前処理します。したがって、ここでは2つの前処理ステップが含まれているように見えます。
c - プリプロセッサ マクロに追加できますか?
標準 C (または GNU 拡張) でマクロ定義に何かを追加する方法はありますか? たとえば、次のように定義されたマクロが与えられた場合、定義したかのように展開されるように
#define List foo bar
追加できますか?bas
List
#define List foo bar bas
私はこのようなことができることを望んでいました:
しかし、マクロを定義する方法がExpand()
わからないので、必要なことを実行します。
動機: 私は、これらの線に沿って、差別された/タグ付けされた組合と遊んでいます:
これは、X マクロに適した場所だと思います。マクロを定義すると
#define quux_table X(foo) X(bar) X(bas)
、列挙と構造を次のように定義でき、同期が外れることはありません。
もちろん、quux_*
構造が同期しなくなる可能性があるため、合法的にのみ、次のようなことをしたいと思います。
(まあ、私が本当にできるようにしたいのは次のような
member_struct(quux, foo) { int x; };
ことですが、マクロはマクロ内から (再) 定義できないことをよく知っています。)
とにかく、それは私の動機付けの例です。これを達成する方法はありますか?
Boost.Preprocessor の例は、そのライブラリで X マクロ手法を機能させる方法を教えていただければ問題ありません。
boost-preprocessor - Boost.Preprocessorを備えたXマクロ?
これをCPPマクロへの追加に関する私の質問から切り離します:
ここで誰かがBoost.Preprocessorライブラリのデータ型を使用してXマクロのようなものを実装したことがありますか?
boost-preprocessor - Boost.Preprocessorは自己完結型ですか?
いくつかのプロジェクトで使用Boost.Preprocessor
することを考えていますが、Boostライブラリ全体を依存関係にしたくありません。
一人でコピーしてこれで済ませることはできますか?そうでなければ、その依存関係は何ですか?
c++ - 単純な定義の代わりにマクロを使用する Boost.Preprocessor の理論的根拠は?
たとえばBOOST_PP_ITERATE
、BOOST_PP_ITERATION
GMan の answere here に見られるように、 と はプリプロセッサ マクロであり、パラメータはありません。それらが単純な定義ではなく、 なしでそのように使用される理由はあります()
か?
c++ - C++ 汎用プログラミングの機微
私が抱えている問題は、次のコードに示されています。
エラー:
私がエミュレートしようとしているパターンは、コード/ビルド レベルでプログラムを拡張することです ( nginxモジュールがコンパイル時に配線される方法とよく似ています)。ビルドに s を追加することで拡張可能 (プラグ可能) な拡張可能なコンパイル時構造を構築する必要があり#include
ます。これにより、すべてのプラグインを含む一意の名前を持つ boost-mpl-vector が生成されます。したがって、が一意の終了名である場合、X_0、X_1、X_2 は、ベクトルに mpl-vectorが適用されているX
ため、途中で構築される名前です。push_back
boost:: preprocessorの抽象化が重要であることはわかっていますが、最終的にコンパイル時にモジュール化されるシステムの一部を試作しているため、まだ調査に時間を費やしたくありません。
というわけで、今後の参考までに
- 上記のエラーが表示されるのはなぜですか?
- 正しい生のプリプロセッサ パターンはどのように見えるべきか。
- 正しいブースト プリプロセッサ ライブラリ パターンはどのように見えますか。