将函数接口以具有可选参数而不是必需参数

时间:2017-11-15 15:56:08

标签: c++ c++03

假设我使用一个函数(来自第三方API,在另一个名称空间中),该函数由函数填充参数并包含一些信息:

double foo::f(double x, double& info);

当我打电话给它时,我必须创建一个局部变量,即使我不关心填充值:

const double x = 3.14159;
double info = 0.0;
const double y = foo::f(x, info);
// Nothing to do with info

然后,我想将此函数接口以具有可选参数而不是引用。是否有比以下更常见/更好/最简单/更易读的方式?

double ff(double x, double* info = 0)
{
  double unused_info = 0.0;
  double& info_ = ((bool)info ? *info : unused_info);
  return foo::f(x, info_);
}

这样可行,但对于需要看起来有点笨拙。

注意:出于兼容性原因,我不使用C ++ 11。但我对C ++ 11解决方案感兴趣,即使它没有回答这个问题。

1 个答案:

答案 0 :(得分:5)

您可以使用一个参数添加重载函数,而不是更改当前实现:

double f(double x)
{
    double info;
    return f(x, info);
}