假设我使用一个函数(来自第三方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解决方案感兴趣,即使它没有回答这个问题。
答案 0 :(得分:5)
您可以使用一个参数添加重载函数,而不是更改当前实现:
double f(double x)
{
double info;
return f(x, info);
}