当我不需要使用函数的所有参数时,我该怎么办?

时间:2014-05-21 17:03:29

标签: c++

我做了一个功能

size_t CalculusWizard::parseDouble(const std::string & str, std::string::const_iterator start, double & d)

用于各种用途。我目前的特殊用途只需要它的返回值,它完全不依赖于参数double & d。所以我在我的代码中做的是创建一个变量dummy,它只是一种形式:

double * dummy = new double;
if (parseDouble(fx, fx.begin(), *dummy) == fx.size())
    fx = "c";
delete dummy;

这是我应该做的吗?关于如何更好地处理这种情况的任何建议?

感谢您抽出宝贵时间回答。

2 个答案:

答案 0 :(得分:4)

您可以使用不同的参数集创建另一个parseDouble方法(即,不是double& d)。

另一个选择是使用外观设计模式,并将解析double的复杂任务留给私有方法,并创建一个方法子集,为您的每个需求接受适量的参数。

你也可以(正如之前的海报所说)使用默认值,虽然我个人不喜欢它们,因为它鼓励我使用“非标准行为”。

答案 1 :(得分:2)

如果你做的话会更整洁/更清洁:

double dummy = 0.0;
if (parseDouble(fx, fx.begin(), dummy) == fx.size())
    fx = "c";

这样您就不必担心清理内存(如果parseDouble会引发异常,那么您将泄漏为dummy分配的内存)。< / p>

要在块结束之前删除dummy,可以使用范围确定来执行此操作:

{ // Start new scope.
    double dummy = 0.0;
    if (parseDouble(fx, fx.begin(), dummy) == fx.size())
        fx = "c";
} // dummy gets destroyed here.