問題タブ [variadic-macros]
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++ - Vardiadic マクロで Variadic テンプレートを展開する (ターゲット関数から引数名を抽出する方法)
私は挑戦的でありながら単純な問題に苦しんでいます。次のようなターゲット関数があるとしましょう
そして、「抽出」したいのは変数名です(つまり、「arg1」、「arg2」)。たとえば、いくつかの前処理で変数のこの情報を取得するのは簡単です
複数の変数がある場合は、可変個引数マクロを使用することもできます
しかし、ターゲット関数から「抽出」する方法の手がかりがありません..たとえば、次のように可変個引数テンプレート手法を使用します
うまくいきません:もちろん、アンパックされた変数ではなく、「A...」を取得します...何かヒントはありますか?
ありがとう!注: C++11、gcc 4.8.1 を使用しています
c++ - MSVC のマクロの可変引数カウント
プログラムのイベントをログに記録するために、この単純なマクロを使用しています。
GCC と MinGW を使用して、Linux と Windows で問題なくコンパイルできます。MSVC 11 はコンパイルに失敗しますが。
注:以前の SO の質問に対するthisとthisの回答を理解するのに苦労しています。マクロや可変引数の数について何かが足りないと思います。そう:
- とは
__VA_ARGS__
? 私はそれを使用する必要がありますか? - MSVC でコンパイル可能なコードにのみ使用する必要がありますか?
__VA_ARGS__
これらのスタッフが不足しているため、上記のコードは間違っている/非標準/エレガントではありませんか?
c++ - 可変個引数マクロまたはテンプレートを使用して一連の関数を実装する
オブジェクトのセットをインスタンス化して初期化するために使用されるメソッドのセットがあります。Init関数に渡される引数の数を除いて、それらはすべてほとんど同じように見えます。
引数は、 Init関数に渡す以外の場所では使用しないことに注意してください。
オブジェクトの種類ごとにコードを複製することなく、これらすべてを実装する方法を見つけたいと思います。
次の(無効な)結果で、可変長マクロを使用してみました:
さて、この実装では、VA_ARGS を 2 回使用しましたが、どちらも間違っています。
最初のケースでは、指定した型 (Arg1 a1、Arg2 a2...) の引数のリストが必要です。
2 番目のケースでは、これらの引数を名前 ( Init(a1, a2...) ) で呼び出したいと思います。
可変個引数テンプレートを使用してみました:
...しかし、これもうまくいかないようです。テンプレート定義行で次のエラーが発生します。
エラー C2143: 構文エラー: '...' の前に ',' がありません
エラー C2065: 'Args': 宣言されていない識別子
私はVS2012を使用しています。
引数の数ごとに N 個の同様のマクロを記述できますが、コードを複製せずに同じ結果を得る方法があるかどうか疑問に思っていました。
c - __VA_ARGS__ で文字列化マクロを定義する際のエラー
「DEBUG:」を引数の先頭に追加し、その引数をprintfに渡す関数マクロをCで実装しようとしています。
これにより、gccで次のエラーが発生します。
おそらく、フォーマットを文字列化し、変数引数をprintfに渡す必要がありますが、これまでのところ、このエラーを乗り越えることはできません。
編集
##
引数の文字列化と二重ハッシュ ( )をあきらめた後、次の__VA_ARGS__
エラーが発生しました。
引数の後にコンマを配置する必要がありますか?
参考までに、DBG() は次のようになります。
c++ - マクロ呼び出し内の #ifdef は gcc では機能しますが、msvc では機能しません
可変引数を取るマクロ TYPELIST があります。のようなものが欲しい
これは gcc と完全に連携します。ただし、MSVC でコンパイルしようとすると、ifdef と endif がマクロ引数として解析されます。1 つの方法は、マクロ呼び出しを ifdef 内に置くことです。しかし、巨大なリストがあり、定義されたさまざまなマクロに応じてさまざまなクラスを含めたい場合は、面倒です。これが MSVC ではなく gcc で機能する特定の理由はありますか?