有可能做这样的事吗?看看这段代码:
#define MyMacro(...) SomeFunction(arg1, arg2, arg3)
现在,我希望有条件地编译第二个参数:
#define MyMacro(...) SomeFunction(arg1,
#if CONDITION
arg2,
#endif
arg3)
这实际上没有编译,但它显示了我想要实现的目标 - 当CONDITION
满足时,我希望MyMacro
使用SomeFunction
的3参数版本和2参数1否则。
当然,在这里我可以只显式地编写两个函数调用但在我的程序中我实际上有3个“条件”参数,这将给我8个组合。
答案 0 :(得分:2)
#if CONDITION
#define ARG2 arg2,
#else
#define ARG2
#endif
#define MyMacro(...) SomeFunction(arg1, ARG2 arg3)
答案 1 :(得分:1)
查看boost :: preprocessor了解更多详情
这个想法如下:
#include <iostream>
#define SELECT0(ARG1, ARG2) ARG1
#define SELECT1(ARG1, ARG2) ARG2
#define SELECT(COND_0_OR_1, ARG1, ARG2) SELECT##COND_0_OR_1(ARG1, ARG2)
const char * s =
SELECT(0, "arg1", "arg2");
int main(void) {
std::cout<<s;
return 0;
}