我想根据我在预处理器级别定义的变量类型有条件地包含函数(或特别是构造函数),例如
#define my_type double
并且在任何时候我都可以有条件地包含一个函数
#if my_type == double
void my_fct();
#endif
效果很好。但是,如果我想将模板化类型分配给 my_type,我该怎么做。以复杂的 double 为例,我会天真地想到
#if my_type == complex<double>
会起作用,但预处理器似乎将最后一个“>”解释为预处理器级别的运算符。 我看不到使用 typedef 的方法,因为我希望预处理器执行条件包含。 当然,我可以为我的整个类(class)制作模板并避免为此任务使用预处理器,但我目前非常不愿意这样做。此外,除了类型之外,总是可以定义另一个预处理器标志,但这看起来很脏。
最佳答案
#if my_type == double
不会测试你是否完成了#define my_type double
。事实上,它永远是真的。
在预处理器算法中你只能使用整数常量表达式,所以你必须设置如下:
// from your makefile or whatever
#define MY_TYPE MY_DOUBLE
...
// in header file
#define MY_INT 3
#define MY_DOUBLE 4
#define MY_COMPLEX_DOUBLE 5
#if MY_TYPE == MY_DOUBLE
typedef double my_type;
#elif MY_TYPE == MY_INT
typedef int my_type;
#elif MY_TYPE == MY_COMPLEX_DOUBLE
typedef complex<double> my_type;
#endif
关于C++预处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26779711/