パラメータの数でマクロをオーバーロードしようとしています。
もちろん、実際にマクロをオーバーロードすることはできません。
可変長マクロを使用して適切なマクロを選択しようとしました(__VA_ARGS__
存在しない場合は、その前の最後のコマを削除するはずであるという事実を使用して - GCC Reference):
#define TEST1() printf("TEST1");
#define TEST2() printf("TEST2");
#define CHOOSER(x, y,FUNC,...) FUNC()
#define MANIMACRO(...) CHOOSER(,__VA_ARGS__,TEST1,TEST2)
int main(void)
{
MANIMACRO(1);
MANIMACRO();
}
アイデアは、__VA_ARGS__
存在する場合、4つの引数をCHOOSERに渡す必要があり、3番目の引数は未使用の引数で「消えた」はずであるというものでした。したがって、TEST1 が選択されます。
パラメータがない場合は__VA_ARGS__
ヌルになり、カンマを削除する必要があるため、TEST2が選択されて使用されます。
__VA_ARGS__
したがって、全体がすでに展開された後、おそらく前処理段階の最後にのみ削除されるため、それは機能しないと思います。
それで、どうすればそのようなことをすることができますか?(vs2010)