相关疑难解决方法(0)

传递大量参数的C++设计模式

我有一个合理大小的类,它实现了几个与逻辑相关的算法(来自图论).需要大约10-15个参数作为算法的输入.这些不是由算法修改的,而是用于指导它的操作.首先,我解释了实现这个的两个选项.我的问题是这样做的常用方法是什么(无论是否是两种选择之一).

我个人不喜欢将这些值作为参数传递给函数N,特别是当我还在开发算法时.

void runAlgorithm(int param1, double param2, ..., bool paramN);
Run Code Online (Sandbox Code Playgroud)

相反,我有一个Algorithm包含算法的类,我有一个AlgorithmGlobals包含这些参数的结构.我要么将这个结构传递给:

void runAlgorithm(AlgorithmGlobals const & globals);
Run Code Online (Sandbox Code Playgroud)

或者我在类中添加一个公共AlgorithmGlobals实例:

class Algorithm {
public:
    AlgorithmGlobals globals;
    void runAlgorithm();
}
Run Code Online (Sandbox Code Playgroud)

然后我在其他地方使用它:

int main() {
    Algorithm algorithm;
    algorithm.globals.param1 = 5;
    algorithm.globals.param2 = 7.3;
    ...
    algorithm.globals.paramN = 5;

    algorithm.runAlgorithm();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请注意,构造函数AlgorithmGlobals为每个参数定义了良好的默认值,因此只需要指定具有非默认值的参数.

AlgorithmGlobals不是私有的,因为它们可以在runAlgorithm()调用函数之前自由修改.没有必要"保护"它们.

c++ algorithm parameters design-patterns function

19
推荐指数
3
解决办法
4618
查看次数

标签 统计

algorithm ×1

c++ ×1

design-patterns ×1

function ×1

parameters ×1