取决于预处理器条件的宏生成
Macro generation depending on preprocessor conditionals
我遇到了如下情况,我在 table 中有一个宏条目:
#define FOR_MY_TYPES(apply) \
apply(a, b, c) \
apply(d, e, f) \
....
我还有一些预处理器条件:
#define CONDITION1 1
#define CONDITION2 0
我希望根据这些条件添加 table 中的一些条目,如下所示:
#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
我的问题是组合比较多,尽量避免重复。它也更容易出错。
一种可能的方法:
#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))
我遇到了如下情况,我在 table 中有一个宏条目:
#define FOR_MY_TYPES(apply) \
apply(a, b, c) \
apply(d, e, f) \
....
我还有一些预处理器条件:
#define CONDITION1 1
#define CONDITION2 0
我希望根据这些条件添加 table 中的一些条目,如下所示:
#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
我的问题是组合比较多,尽量避免重复。它也更容易出错。
一种可能的方法:
#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))