2
私はvariadicマクロに送られた最初の実際のパラメータを取得しようとします。これは私が試したもので、これはVS2010で動作しません。他にvariadicパラメータだけを取ってマクロに送られた最初のパラメータを取り除く方法
#define FIRST_ARG(N, ...) N
#define MY_MACRO(...) decltype(FIRST_ARG(__VA_ARGS__))
私はFIRST_ARG
がMY_MACRO
に送られた引数リスト全体を返すことがわかりプリプロセッサの出力を見て...
私が試してみると、手を差し伸べてください:
FIRST_ARG(1,2,3)
意図したとおりに1に伸びます。
これは、悪名高い2レベルの連結マクロによって解決された問題の逆のようです。私は "マクロのパラメータはマクロ本体に挿入される前に完全に拡張されている"ことを知っていますが、これは私がコンテキストの意味で何を意味するのか理解していないので、ここで助けてくれないようです... N
に設定され、後で評価されます。私は余分なマクロレベルでいくつかの方法を試しましたが、助けにはなりませんでした。
:
がに展開されます。 – aschepler
@aschepler:はい。私はちょうどそれを見て、OPのユースケースでそれをテストしていました。それはうまく動作し、私は答えにデモを追加しました。回避策は、マクロを書くときに最も重要なルールを示しています。「最初は成功しない場合は、カッコを追加してください。 ;-) –
参照[ここ](https://stackoverflow.com/questions/5134523/msvc-doesnt-expand-va-args-correctly/5134656#5134656) – ghd