宏生成取决于预处理器条件

时间:2016-09-23 02:52:47

标签: c++ c macros c-preprocessor code-generation

我遇到如下情况,其中我在带有宏的表中有条目:

#define FOR_MY_TYPES(apply) \
  apply(a, b, c) \
  apply(d, e, f) \
  ....

我也有一些预处理器条件:

#define CONDITION1 1
#define CONDITION2 0

我希望根据这些条件添加表中的一些条目,如下所示:

#define FOR_MY_TYPES(apply) \
    apply(a, b, c) \
    #if CONDITION1 || CONDITION2
    apply(x, y, z)
    #endif

实现此目的的最佳方法是仅保留一个宏定义,并且如果可能,避免根据条件重复条目。我想避免这个:

#if CONDITION1
#define FOR_MY_TYPES(apply) \
   ....Full table here...
#endif
#if CONDITION2
#define FOR_MY_TYPES(apply) \
//Full table again + CONDITION2 types
#endif
#if CONDITION1 || CONDITION2
#define FOR_MY_TYPES(apply) \
//Full table again + CONDITION1 || CONDITION2 types
#endif

我的问题是有很多组合,所以我应该尽可能避免复制。它也更容易出错。

1 个答案:

答案 0 :(得分:4)

一种可能的方法:

#if CONDITION1 || CONDITION2
#define really_apply(x) x
#else
#define really_apply(x)
#endif

#define FOR_MY_TYPES(apply) \
    apply(a, b, c) \
    really_apply(apply(x, y, z))