-2

哪种方法最好只为一个类实现多个顺序关系?我对策略模式有一个想法,但我不确定这是一个好主意。如果没有最好的方法,为什么?

4

2 回答 2

1

创建一个仿函数类并使用您要使用的顺序关系初始化一个成员。已经operator()使用成员来决定两个操作数的顺序。

class Ordering
{
public:
    Ordering(int method) : _method(method) {}
    bool operator()(const MyObject & first, const MoObject & second) const
    {
        switch(_method)
        {
            case 0:
                return first.name < second.name;
            case 1:
                return first.age < second.age;
            // ...
        }
    }
    int _method;  // an enum would be better
};

std::sort(myobjs.begin(), myobjs.end(), Ordering(selected_method));
于 2012-12-26T22:52:45.163 回答
0

我认为 Strategy 在这里是一种更好的方法,而且我不太确定 switch 结构是否是个好主意(想象一下,一个 switch 中有 1000 个比较方法......太重了,不是吗?)

所以让A,一个需要方法比较的类。

我建议为每个方法创建一个类,哪个实例将是 A 的组件。

例如 :

class A{
    private:
    //Some attributes
    Comparator<A> comp_;

    public:
    //Some methods (including constructor)
    bool operator()(const MyObject & first, const MoObject & second) const
    {
        return comp_.compare(first,second);
    }
     void setComparator(Comparator<A>& comp){
        comp_ = comp;
    }
}


//Forgot the syntax about template. So there is a template with one parameter
class Comparator{
     public:
     //Constructor

     //To overwrite on subclasses
     virtual bool compare(T& first, T& second) = 0;


}

使用该配置,您可以轻松添加方法,而无需修改 A,只需在程序执行的任何时刻设置正确的比较器即可。

于 2012-12-26T23:19:32.800 回答