I を使用BOOST_PP
すると、次のコードに示すように、追加のトークンを使用してマクロを複数のコンマ区切りの値に展開できます。
ただし、引数がない場合は機能しません。
#define BOOST_PP_VARIADICS
#include <boost/preprocessor/punctuation/comma_if.hpp>
#include <boost/preprocessor/seq/for_each_i.hpp>
#include <boost/preprocessor/variadic/to_seq.hpp>
#define ADD_TOKEN(r, token, i, e) \
BOOST_PP_COMMA_IF(i) token(e)
#define WRAP(...) \
BOOST_PP_SEQ_FOR_EACH_I(ADD_TOKEN, decltype, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__))
#define MACRO(fmt, ...) \
Template<WRAP(__VA_ARGS__)>
MACRO("");
MACRO("", 0);
MACRO("", 0, 1);
でコンパイルしたときの出力gcc -E main.cpp
は
Template< decltype() >;
Template< decltype(0) >;
Template< decltype(0) , decltype(1) >;
MACRO
引数なし__VA_ARGS__
でnullに展開する呼び出しを取得するにはどうすればよいですか?
つまり、出力を次のようにしたいと思います。
Template< >;
Template< decltype(0) >;
Template< decltype(0) , decltype(1) >;
どうすればこれを達成できますか?