問題タブ [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 に答える
1003 参照

c++ - マクロ展開の結果を異なる引数に分ける方法は?

Boost.Preprocessor メタプログラムを書いていますが、次の問題があります。次のマクロを検討してください (これは問題を説明するために単純化したものです)。

前処理された出力は次のとおりです。

これは、args()が複数の引数に分割されていないことを示しています。標準に関する私の理解によれば、マクロの引数は置換リストに貼り付けられる前に完全に展開されます。したがって、次の展開シーケンスが期待されます。

それが私の望む結果です。ITERATION_IMPL呼び出し自体を変更せずにそれを達成するにはどうすればよいですか?

編集:それが不可能な場合(そして私はそう思う)、CまたはC ++の標準に基づいて説明してください。

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

boost-preprocessor - Boost.Preprocessorは、CPU用のマクロのセットですか、それとも別のプロセッサですか?

Boost.Preprocessorは、CPU用のマクロのセットですか、それとも別のプロセッサですか?

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

c++ - Boost.Preprocessor: BOOST_PP_TUPLE_ELEM および BOOST_PP_SEQ_ELEM

私の問題はコードで最もよく説明されています:

私は何を間違っていますか?


うーん、ありがとう

出力:

どちらが正しい。しかし、それは私の問題を解決しません。なぜなら、シーケンスを で使用したいからですBOOST_FUSION_DEFINE_STRUCT。つまり、余分な括弧を使用することはできません。私はこのようなことをしたい:

0 投票する
3 に答える
1530 参照

c++ - ライブラリのシンボルをエクスポートするための再帰的な明示的なテンプレートのインスタンス化

以前の質問で私が尋ねたのは、再帰的な明示的なテンプレートのインスタンス化が可能であるということです。それが実際に可能であることがわかりました。ただし、このインスタンス化はローカルでのみ有効であることが判明し、再帰的にインスタンス化されたテンプレートのシンボルはオブジェクト ファイルにエクスポートされないため、(共有) ライブラリには表示されません。そこで、以前の投稿と同様に、ここでより正確に質問します。

次のようなテンプレートが与えられた場合

このテンプレートは明示的にインスタンス化できます

Point<0>、...のシンボルをPoint<3>現在の翻訳単位のオブジェクトファイルにエクスポートします。上記のようにすべてのテンプレートを個別にインスタンス化する代わりに、1 回の呼び出しで再帰的にインスタンス化したいと考えています。

これを達成するソリューションは、テンプレートのメタプログラミングのスタイルであっても、次のようなヘルパー クラスを介しても問題ありません。

またはプリプロセッサ経由。ここでは、いくつかのループ構造を持っているように見えるブースト プリプロセッサ ライブラリを調べました。ただし、boost プリプロセッサ ライブラリを使用したことはありません (アドバイスをいただければ幸いです)。

どんなアドバイスでも、私が達成したいことが不可能な理由の説明もいただければ幸いです。


Node<int i1,int i2,int i3>実際、{0,1,2,3} の i1、i2、i3 のすべての組み合わせのように、複数のテンプレート パラメーターを持つクラスに対してこれを一般化することに関心があります。しかし、私はこの第 2 部を自分で解決できることを望んでいます。いつものように、明示的なインスタンス化を使用して、1 つの翻訳単位でテンプレートを定義するだけでコンパイル時間を短縮したいので、テンプレート化するメソッドをオブジェクト ファイルにエクスポートする必要があります。

コンパイラに依存しないソリューションを望んでいますが、それが不可能な場合は、g++/clang を使用する Linux で必要です。


私が得た解決策の調査と、これから作成した最終的な解決策については、以下を参照してください。

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

c - どのブースト マクロを使用すると、プログラムに可変数のステートメントを挿入できますか

次の例の効果を実現したいとします。

今、私は自分のプログラムに何度でもその行を挿入したいと思っています。そのステートメントを 1000 回挿入したい場合は、手動でコピーして貼り付ける必要があります。

目的は、プログラムにステートメントを挿入することであり、同じ論理的な動作を実現するだけではありません。

nステートメントを指定し、そのステートメントをプログラムに挿入するマクロを使用したいと思いnます。これは、Boost ライブラリ マクロを使用して可能だと思います。しかし、私は Boost を使用したことがなく、どれを使用すればよいかわかりません。また、私はC++ ではなく C に制限されていますが、このブースト マクロは C でも機能するはずです

この効果を得るために何をどのように使用するかを知りたい

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

c++ - 異なる長さのテンプレートパラメータを持つboost::functionサポートテンプレートクラスはどのように機能しますか

基本的にboost::functionと同じように、boostプリプロセッサを使用して異なるテンプレート変数の長さのテンプレートクラスを宣言したいと思います。

上記のコードは、同じヘッダーファイルで異なるテンプレート変数の長さを持つ同じクラスを宣言しているため、明らかに機能しません。私が達成したいのは、boost :: functionのように、単一のファイルを含め、異なるテンプレート変数の長さでクラスを定義することです。

boost :: functionのコードを調べましたが、どのように機能するのか理解できません。何か案は?

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

c++ - Variadic Sequence の C++ テンプレートとコード生成: 各引数/型に対して同様のコード ブロックを作成する方法は?

次のようなクラス (疑似コード) を作成できるのではないかと思います。

そして、たとえば定義を使用して、コンパイル時に提供された引数の型ごとに関数を自動生成して、(疑似コード) のようなものを取得できる場合:

現代のC ++でそのような/または少し似たようなことが可能ですか?それを作成する方法は?

私が言おうとしているのは、関数テンプレートからコンストラクターに提供されるクラスタイプごとに、関数を生成したいということです。そして、そのようなことをどのように行うのだろうか?ここでは、繰り返す方法を示します が、クラス引数とその型に提供されたものを繰り返す方法は?

Nつまり、クラス テンプレートの引数 ( )の量がわかればN、さまざまな型 (引数ごとに 1 つ) とN文字列 (すべてプライベート) の変数を作成できるので、Nそのセッターとゲッターの関数を作成できます (strings +変数) (コンストラクターで呼び出します)。ここでの主な問題は、同じ型を 2 回以上取得する時間を解決する方法、boost.preprocessor から大量の引数を取得する方法、同じ型をフィルタリングする方法です。

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

c++ - `g ++ -Efile.cxx`のVisualStudio2010アナログとは何ですか?

何かありますか、IDEで結果を見ることができますか?

だから私はブーストプリプロセッサを使用し、ここに示されているコードサンプルを試してみます(!warning-ロシア語)

私のIDEはVS2010(究極)です。IDEが見ているようにコードをどのように見るのか疑問に思います。つまり、定義をコードに変換したという意味です。IDE内で実行できますか、VS consolから実行できますか?

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

c++ - Boost プリプロセッサの複数のテンプレート クラスの生成

この C++ コード/回答( map を作成するstring <-> some_array_of_predefined_function_typesクラス) を、ブースト/プリプロセッサを使用してより自動化されたクラスに変えようとしています。

次のコードを作成しました。

次の5つのエラーでコンパイルされません:

プリプロセッサが生成する間:

私は何が間違っていて、どうやってコンパイルするのだろうかと思っています。

0 投票する
3 に答える
430 参照

c++ - boost :: mplを使用して、「空」ではないテンプレートクラスの数を取得し、この番号でマクロを呼び出すにはどうすればよいですか?

boost::mpl::eval_if空でないテンプレート引数の数を与えることができる(または同様の関数)の結果に応じて、いくつかの引数を使用してマクロを呼び出したいと思います。次のような擬似コードがあるとします。

引数の数に応じて、クラスをコンテンツで埋めようとしていますEmptyType。Boost.MPL/プリプロセッサまたは他のBoostライブラリを介してC++03でそのようなことをどのように行うことができるのだろうか?