我有以下问题。我已经编写了以下方法。设置标志后,将使用哪个版本。

#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/

10-12 16:05