Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 接口使函数具有可选参数而不是必需参数_C++_C++03 - Fatal编程技术网

C++ 接口使函数具有可选参数而不是必需参数

C++ 接口使函数具有可选参数而不是必需参数,c++,c++03,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 然后,我想为这个函数提供一个可选参数,而不是一个引

假设我使用一个函数(来自另一个命名空间中的第三方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解决方案很感兴趣,即使它不能回答这个问题。

与其更改当前的实现,您只需添加一个带一个参数的重载函数:

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

您只需添加一个带一个参数的重载函数,而无需更改当前实现:

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

@ Caduchon。如果你可以(改变)改变一个函数,你也可以重载它,不管它的命名空间不在其中。@ N.M,你真的认为安全超载我自己的代码> LAPACK::DGESVD ?@ CADUCHON如果修改函数的签名是安全的,那么重载它也是同样安全的。它的名称空间不重要。@Caduchon-重载不必在同一名称空间中。只需使用using声明(在您选择的范围内)介绍这两种方法,并让重载解析根据参数的数量选择正确的方法。@Caduchon-
mynamespace
应该是
libnamespace\u util
,并且using声明/指令的组合可以允许您使用任何类型的统一前缀。坦白说,在我看来,你只是过于悲观了。但正如他们所说,这是你的派对。Caduchon,如果你能(改变)改变一个函数,你也可以重载它,不管它的命名空间不在其中。@ N.M你真的认为安全超载我自己的代码> LAPACK::DGESVD ?@ CabuChon如果修改一个函数的签名是安全的,那么重载它也是同样安全的。它的名称空间不重要。@Caduchon-重载不必在同一名称空间中。只需使用using声明(在您选择的范围内)介绍这两种方法,并让重载解析根据参数的数量选择正确的方法。@Caduchon-
mynamespace
应该是
libnamespace\u util
,并且using声明/指令的组合可以允许您使用任何类型的统一前缀。坦白说,在我看来,你只是过于悲观了。但正如他们所说,这是你的派对。做任何适合你的事。