Ice*_*ire 28 c++ algorithm class
我有一个复杂的算法.它使用许多变量,在初始化时计算辅助数组,并沿途计算数组.由于算法很复杂,我将其分解为几个函数.
现在,我实际上并没有看到这可能是一种习惯性的方式; 我的意思是,我只是习惯将算法作为函数.用法只是:
Calculation calc(/* several parameters */);
calc.calculate();
// get the heterogenous results via getters
Run Code Online (Sandbox Code Playgroud)
另一方面,将它放入类中具有以下优点:
混合方式是将算法类放入源文件中,并通过使用它的函数访问它.算法的用户不会看到该类.
有没有人有宝贵的想法可以帮助我?
非常感谢你提前!
utn*_*tim 33
我有一个复杂的算法.这使用了许多变量,在初始化时计算辅助数组,并且还沿途计算数组.[...]
现在,我实际上并没有从惯用的方式看出这可能是一个类
事实并非如此,但许多人做同样的事情(我也做了几次).
不要为算法创建类,而是考虑将输入和输出转换为类/结构.
也就是说,而不是:
Calculation calc(a, b, c, d, e, f, g);
calc.calculate();
// use getters on calc from here on
Run Code Online (Sandbox Code Playgroud)
你可以写:
CalcInputs inputs(a, b, c, d, e, f, g);
CalcResult output = calculate(inputs); // calculate is now free function
// use getters on output from here on
Run Code Online (Sandbox Code Playgroud)
这不会产生任何问题,并执行相同(实际上更好)的数据分组.
Rei*_*ica 16
我认为将算法(或者更好的是,计算)表示为类是非常惯用的.OOP中对象类的定义之一是"对该数据进行操作的数据和函数".具有输入,输出和中间数据的compex算法完美匹配此定义.
我已经多次自己完成了这项工作,它简化了(人工)代码流分析,使整个事情更易于推理,调试和测试.
如果客户端代码的抽象是算法,那么您可能希望保留纯粹的功能接口,而不是在那里引入其他类型.另一方面,这种功能在源文件中实现是很常见的,该源文件为内部使用定义了公共数据结构或类,因此您可能具有:
double calculation( /* input parameters */ )
{
SupportClass calc( /* input parameters */ );
calc.part1();
calc.part2();
// etc...
return calc.results();
}
Run Code Online (Sandbox Code Playgroud)
根据代码的组织方式,SupportClass
将位于源文件中的未命名命名空间(可能是最常见的情况),或者位于"私有"标头中,仅包含在算法中涉及的源中.