我有一个合理大小的类,它实现了几个与逻辑相关的算法(来自图论).需要大约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()调用函数之前自由修改.没有必要"保护"它们.