1

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

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;
}

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

4

1 回答 1

2

你的问题很笼统,没有笼统的答案。这取决于实际情况。

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

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

如果您想获得更好的答案,我认为您应该问一个更具体的问题。

于 2012-10-29T11:09:34.560 回答