問題タブ [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.

0 投票する
1 に答える
100 参照

boost - 複数のファイルを 1 つのファイルに前処理する

を使用するディストリビューションとビルド プロセスを簡素化しようとしていますboost::shared_ptr(Android と STLport には含まれていませんshared_ptr)。Boost を使用して、その依存関係bcpをコピーしました。shared_ptrその結果、340 の依存関係が多数のディレクトリに分散しました。

単一のファイルに前処理boost::shared_ptrしてから、その単一のファイル ( shared_ptr.hpp) をdeps/ディレクトリに配置する方法はありますか?

0 投票する
2 に答える
476 参照

c++ - コンパイル時に BitCount LUT を生成する

0 ~ 255 の値に対して、事前計算されたビット カウント値 (数字の 1 ビットのカウント) を含む LUT を作成する必要があるとします。

ハードコーディングされた値を使用したくない場合は、適切なテンプレート ソリューションを使用できます。32 ビット整数で設定されたビット数をカウントするには?

この配列は、コンパイル時に完全に計算されます。長いリストを回避し、ある種のテンプレートまたはマクロを使用してそのような配列を生成する方法はありますか (申し訳ありません!)、次のようなものです。

注意事項. この質問は、数値の 1 ビットを数えることに関するものではなく、例として使用されています。外部コード ジェネレーターを使用せずに、このような配列をコード内で完全に生成したいと考えています。コンパイル時に配列を生成する必要があります。

編集します。コンパイラの制限を克服するために、Bartek Banachewicz のコードに基づいて、次の解決策を見つけました。

私はこれがおそらくUBであることを知っています...

0 投票する
2 に答える
1153 参照

c++ - BOOST_PP_TUPLE_SIZE() と空のタプル '()'

タプルのシーケンスがあります: '(int,double)(char)()'

タプルが空かどうかを検出する必要があります。ただし、タプルが空であっても BOOST_PP_TUPLE_SIZE() は 1 を返します。

教えてください、タプルに要素が含まれていないことを確認するにはどうすればよいですか?

Edit1 例:

0 投票する
1 に答える
1415 参照

boost-preprocessor - variadic が空の場合、プリプロセッサのスキップをブースト

関数を生成するために、次のブースト プリプロセッサ マクロがあります。

if__VA_ARGS__が空でない限り、これはうまく機能します。いくつかの検索の後、BOOST_PP_VARIADIC_SIZE を__VA_ARGS__使用して引数の数をカウントする方法を見つけました。少し考えた後、私はこのマクロを書きました:

これでうまくいくと思いますが、次の警告が表示され続けます

これは警告ですが、それでもプリプロセッサが壊れているようです。複数の引数を渡すと、最初の引数のみが処理されます。これはとても奇妙だと思います。すべてが壊れる場合、これを追加するにはどうすればよいですか?コンマと括弧を何百回もチェックしましたが、問題ないようです。このプリプロセッサを修正するにはどうすればよいですか?

http://www.boost.org/doc/libs/1_54_0/libs/preprocessor/doc/ref/if.html

編集: この回帰は関連しているようです: https://svn.boost.org/trac/boost/ticket/8606

0 投票する
2 に答える
1445 参照

c++ - BOOST_PP_REPEAT 内のデータの複数の引数

BOOST_PP_REPEAT(count, macro, data) を使用したいのですが、マクロは次のようになります

`TEMPLATE (z、n、x、y)

BOOST_PP_REPEAT (5, テンプレート, 4, 5)`

BOOST_PP_REPEAT に 4 つの引数が渡されると不平を言いますが、3 つしか期待されていません。BOOST_PP_REPEAT の「データ」パラメーターに 2 つの引数をパックする方法はありますか。

ありがとう!

0 投票する
1 に答える
606 参照

c++ - 一連のヘッダー ファイルに対するプリプロセッサ ループ

ファイルのシーケンスを含めることは可能ですか:file1,file2,file3 プリプロセッサ ループに?

そしてそれを次のように使用します:

に展開する必要があります

残念ながら、 #include GENERATE_FILE_NAME(n)マクロが展開されないため、上記は機能しません...

これは可能ですか?

コメント:
これが可能かどうか疑問に思っていたので、この質問を投稿しました。すべてのファイルから生成されたファイルを 1 つだけ含めることで問題を解決しましたfile1 file2 file3。これに遭遇したのは、大きなインクルード ファイル シーケンスが生成される場合があり (これは読みやすさのためにマージされるべきではありません)、すべてのファイル名を明示的に記述せずにそれらすべてをインクルードする方法がわからないため、プリプロセッサ ループについて考えました。もちろん、これまでの私のソリューションよりも醜いです:-)、しかしその手の込んだものです:-)

0 投票する
1 に答える
221 参照

c - 可変個引数と後期展開を使用して文字列化されたマクロ引数のリストを作成する

次の問題があります-可変数のマクロ引数argXを指定して、文字列化された引数#argXのリストを作成します

例:

私は Boost を使用しているので、上記のマクロは、引数の数ごとにヘルパー マクロを使用して実装し、LIST(...) を適切な LIST_n(arg1, ... argn) にディスパッチするのはそれほど難しくありません。

問題は、LIST への入力自体がマクロである場合に始まります。その場合 (... と __VA_ARGS__ を使用すると)、マクロは文字列化される前に展開され、次のようになります。

Windowsヘッダーで定義されたマクロでこれを機能させたいのですが、そこにある値のほとんどはマクロ(MB_OK、AF_INETなど)であるため、取得するのは文字列化された数値のリストだけです。

__VA_ARGS__ を使用しない場合、すべて正常に動作します。

__VA_ARGS__ の展開を後で延期するいくつかのマクロを試しました (たとえば、可変引数のない LIST_1 まで) が、何も機能しませんでした。

これは、C プリプロセッサを使用して実装することも可能ですか?

0 投票する
1 に答える
399 参照

c++ - ネストされたマクロの結果を連結する

次の一連のマクロがあります。

ここで、前のものに評価される別の汎用マクロを作成したいと思います。次のようにしようとしています。

その背後にある考え方はBOOST_PP_VARIADIC_SIZE(__VA_ARGS__)、正しい数のパラメーターに評価され、それが正しいマクロに変わるというものです。

BOOST_PP_VARIADIC_SIZE()しかし、残念ながら、が に連結された後に が評価さmacro_れ、不要なコードが発生することがわかりましたmacro_BOOST_PP_VARIADIC_SIZE

BOOST_PP_VARIADIC_SIZE最初に評価してから連結できる方法はありmacro_ますか?

0 投票する
1 に答える
193 参照

c++ - C++ プリプロセッサ条件の場合に単語を追加

プリプロセッサのメタプログラミング Boost.Preprocessor を使用するライブラリを作成しています。1 つのマクロは次のようになります。

さて、問題は、returnif my_typeisを削除する必要があることですvoid。Boost.Preprocessor を確認しましたが、役立つものは何もありませんでした。どうすればこれを達成できますか? 何かのようなもの: