我有以下问题。我已经编写了以下方法。设置标志后,将使用哪个版本。
#define version2
void calc(double &x
#ifdef version2
, double &dot_x
#endif){
for(int i=0;i<n;i++){
double data[]=[... expensive computation ...];
x=[... something depending on data...];
#ifdef version2
dot_x=[... something depending on data ...];
#endif
}
}
但是现在,我同时需要两个版本,并且我不想复制它。因为我每次都必须在两个版本的数据计算上进行更改。
是否有可能在一个地方实现两个版本(例如makro等)?如果没有if判定,那会花费时间吗?
非常感谢您的回答,
基尔施罗特
最佳答案
只需定义函数的2个重载,一个重载一个参数,一个重载2:
void calc(double &x){...}
void calc(double &x, double &dot_x){...}
并分解出通用代码。然后,您可以决定(在运行时还是在编译时,通过
#ifdef
)要调用的重载之一。您甚至只能定义一个版本,并使用默认的第二个参数(指针类型),
void calc(double &x, double *dot_x = nullptr){...}
如果未明确指定第二个参数(即保留为
nullptr
),则进行“便宜”计算,否则,进行“昂贵”计算。我会尽量避免使用宏(除非真正必要),因为它们会使您的代码可读性降低并引起讨厌的副作用。
关于c++ - 如何在C++中创建方法的多个版本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30278860/