哪种方法最好只为一个类实现多个顺序关系?我对策略模式有一个想法,但我不确定这是一个好主意。如果没有最好的方法,为什么?
问问题
73 次
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 回答