宏与如果里面

Macro with if inside?

本文关键字:如果      更新时间:2023-10-16

可以做这样的事情吗?看看这个代码:

#define MyMacro(...) SomeFunction(arg1, arg2, arg3)

现在,我希望有条件地编译第二个参数:

#define MyMacro(...) SomeFunction(arg1,
#if CONDITION
    arg2,
#endif
    arg3)

这实际上不会编译,但它显示了我想要实现的目标 - 当CONDITION满意时MyMacro我希望使用 SomeFunction 的 3 参数版本和 2 参数版本。

当然,在这里我可以显式编写两个函数调用,但在我的程序中,我实际上有 3 个"条件"参数,可以给我 8 种组合。

#if CONDITION
#define ARG2 arg2,
#else
#define ARG2
#endif
#define MyMacro(...) SomeFunction(arg1, ARG2 arg3)

查看 boost::p reprocessor 了解更多详情

其思路如下:

#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;
}
相关文章: