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

What should I do when I don't need to use all the parameters of a function?

本文关键字:参数 我该怎么办 不需要 函数      更新时间:2023-10-16

我创建了一个函数

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;

我应该这么做吗?对于如何更好地处理这类场景有什么建议吗?

感谢您抽出时间来回答。

你可以用一组不同的参数创建另一个parseDouble方法(即,不是双引号&d)。

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

你也可以(正如之前的海报所说)使用默认值,尽管我个人不喜欢它们,因为它鼓励使用"非标准行为"对我来说

如果你这样做的话会更整洁:

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

这样你就不必担心清理内存(如果parseDouble抛出异常怎么办?您将泄漏分配给dummy的内存)。

要在块结束之前删除dummy,可以使用作用域:

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