我想根据我在预处理器级别上定义的变量类型有条件地包括函数(或特别是构造函数),例如

#define my_type double

在任何时候我都可以有条件地包含一个函数
#if my_type == double
void my_fct();
#endif

效果很好。但是,如果要将模板化类型分配给my_type,该如何做。例如,使用复杂的double,我会天真地想到
#if my_type == complex<double>

可以,但是预处理器似乎将最后的“>”解释为预处理器级别的运算符。
我没有使用typedef的方法,因为我希望预处理器执行条件包含。
当然,我可以为整个类做模板,并避免使用预处理器来完成此任务,但是我目前非常不愿意这样做。同样,除了类型之外,总可以定义另一个预处理器标志,但这似乎很脏。

最佳答案

#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++ - C++预处理器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26779711/

10-12 04:49