假设我使用一个函数(来自第三方API,在另一个名称空间中),函数由函数填充一些信息:
double foo::f(double x, double& info);
Run Code Online (Sandbox Code Playgroud)
当我调用它时,我必须创建一个局部变量,即使我不关心填充值:
const double x = 3.14159;
double info = 0.0;
const double y = foo::f(x, info);
// Nothing to do with info
Run Code Online (Sandbox Code Playgroud)
然后,我想将此函数接口以具有可选参数而不是引用.是否有比以下更常见/更好/最简单/更易读的方式?
double ff(double x, double* info = 0)
{
double unused_info = 0.0;
double& info_ = ((bool)info ? *info : unused_info);
return foo::f(x, info_);
}
Run Code Online (Sandbox Code Playgroud)
这有效,但对于需要看起来有点笨拙.
注意:出于兼容性原因,我不使用C++ 11.但我对C++ 11解决方案很感兴趣,即使它没有回答这个问题.
您可以使用一个参数添加重载函数,而不是更改当前实现:
double f(double x)
{
double info;
return f(x, info);
}
Run Code Online (Sandbox Code Playgroud)