可変引数マクロに送信される最初の実パラメータを取得しようとしています。これは私が試したもので、VS2010では機能しません:
#define FIRST_ARG(N, ...) N
#define MY_MACRO(...) decltype(FIRST_ARG(__VA_ARGS__))
プリプロセッサの出力を見るとFIRST_ARG
、送信された引数リスト全体が返されていることがわかりますMY_MACRO
...
一方、私が試してみると:
FIRST_ARG(1,2,3)
意図したとおりに 1 に展開されます。
これは、悪名高い 2 レベルの concat マクロによって解決される問題の逆のようです。「マクロパラメーターはマクロ本体に挿入される前に完全に展開される」ことは知っていますが、これがコンテキストで何を意味するのか理解できないため、ここでは役に立たないようです...そして__VA_ARGS__
明らかに__VA_ARGS__
バインドされN
、後でのみ評価されます。追加のマクロ レベルでいくつかの方法を試しましたが、役に立ちませんでした。