我希望有条件地包含函数(或者特别是构造函数),这取决于我在预处理程序级别上定义的变量类型。
#define my_type double在任何时候我都可以有条件地包含一个函数
#if my_type == double
void my_fct();
#endif效果很好。但是,如果要将模板类型分配给my_type,如何做到这一点。例如,使用复杂的双,我会天真地认为
#if my_type == complex<double>可以工作,但预处理程序似乎将最后一个">“解释为预处理级别上的操作符。我没有看到一种使用类型防御的方法,因为我希望预处理程序执行条件包含。当然,我可以模板我的整个类,避免在这个任务中使用预处理器,但目前我非常希望不使用。另外,除了类型之外,还可以定义另一个预处理器标志,但这似乎很脏。
发布于 2014-11-06 12:45:28
#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发布于 2014-11-06 12:45:41
我很惊讶my_type == double能工作;它绝对不应该工作。预处理器只能计算简单的数字表达式。
所以答案是否定的,你不能使用模板类型(预处理程序不知道类型,它只是做标记替换)。如果需要类型级别上的逻辑,则需要模板。
发布于 2014-11-06 13:04:56
一个成熟的模板怎么样,比如:
template <class T>
void my_fct() {
// your code based on T as a type
}并且,您可以调用为:my_fct<int>、my_fct<double>等来传递数据类型,以便进行适当的模板实例化。
https://stackoverflow.com/questions/26779711
复制相似问题