C++ 在C+中将算法参数设置定义为独立类是否是一种良好的做法+;?

C++ 在C+中将算法参数设置定义为独立类是否是一种良好的做法+;?,c++,C++,我想知道将算法参数设置定义为一个独立的类是否是一个好的实践。我用以下代码来说明我的问题: using namespace std; class Parameters { public: Parameters():a_para_(0),b_para_(0) {}; ~Parameters() {}; Parameters(const Parameters &para) { a_para_ = para.a_para_; b_

我想知道将算法参数设置定义为一个独立的类是否是一个好的实践。我用以下代码来说明我的问题:

using namespace std;

class Parameters
{
public:
    Parameters():a_para_(0),b_para_(0) {};
    ~Parameters() {};
    Parameters(const Parameters &para)
    {
        a_para_ = para.a_para_;
        b_para_ = para.b_para_;
    }
    void set_a_parameter(int a)
    {
        a_para_ = a;
    }
    void set_b_parameter(int b)
    {
        b_para_ = b;
    }
private:
    int a_para_;
    int b_para_;
};

class Algorithm
{
public:
    Algorithm() {};
    ~Algorithm() {};
    void set(const Parameters &para)
    {
        para_ = para;
    }
    void run()
    {
    }
private:
    Parameters para_;
};


int main()
{
    Parameters para;
    para.set_a_parameter(3);
    para.set_b_parameter(4);
    Algorithm fun;
    fun.set(para);
    fun.run();

    return 0;
}

背后的原理是参数设置和算法实现可以分开。我与一位经验丰富的程序员讨论了这个设计策略,他似乎更喜欢将参数设置和算法作为一个类混合在一起。因此,我在这里写信征求你的意见:哪一个更好?谢谢

你的问题很笼统,没有笼统的答案。这要视情况而定

通常,您希望能够在编译时确定算法的参数(例如,给定缓冲区的大小、矩阵的维数或树节点的算术)。可以说,通常这些参数在算法“实例”的生命周期内不会改变。在这种情况下,将算法类转换为模板并使这些参数成为模板参数通常是一种好的做法

如果参数在算法生命周期内必须更改,但它们的实现非常简单,则无需将其外部化。如果它们是非平凡的,并且它们的实现细节可能会改变算法性能(例如:基于密集矩阵数组的矩阵实现,或者基于稀疏矩阵的链表的矩阵实现),那么我认为您可以将该参数外部化


如果你想得到更好的答案,我想你应该问一个更具体的问题。

为什么要把它们分开?类由变量和函数组成。变量可以是您的参数,函数可以是您正在运行的算法。我认为没有必要将它们分开。对于这样简单的事情,我个人会使用一个包含两个参数的简单函数。在我看来,类不是用来分离算法的,而是用来组合公共属性的。这里甚至不应该有一个类,更不用说两个了。@BenjaminLindley谢谢你的评论。这里我只举了一个例子,事实上,在算法中有更多的参数需要设置。我个人同意到目前为止所说的,除非有一个层次结构的“算法”和许多可能的参数集?可以多次使用,也可以用于多种算法。除非你有这样的用例,否则把事情放在一起总是很简单的。