C++ 为一个类实现多个顺序关系?
对于一个类,哪种方法是实现多个顺序关系的最佳方法?我有一个想法,但我不确定这是一个好主意。如果没有最好的方法,为什么?创建一个函子类,并用您想要使用的顺序关系初始化一个成员。让C++ 为一个类实现多个顺序关系?,c++,C++,对于一个类,哪种方法是实现多个顺序关系的最佳方法?我有一个想法,但我不确定这是一个好主意。如果没有最好的方法,为什么?创建一个函子类,并用您想要使用的顺序关系初始化一个成员。让运算符()使用成员决定两个操作数的顺序 class Ordering { public: Ordering(int method) : _method(method) {} bool operator()(const MyObject & first, const MoObject & se
运算符()
使用成员决定两个操作数的顺序
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));
类排序
{
公众:
排序(int方法):_方法(方法){}
布尔运算符()(常量MyObject&第一,常量MoObject&第二)常量
{
开关(_方法)
{
案例0:
返回first.name
我认为策略是一种更好的方法,我不太确定切换结构是否是一个好主意(想象一下,一个切换中有1000个比较方法……太重了,不是吗?)
让我们来看一个,一个需要方法比较的类
我建议为每个方法创建一个类,哪个实例将是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类{
私人:
//一些属性
比较器;
公众:
//一些方法(包括构造函数)
布尔运算符()(常量MyObject&第一,常量MoObject&第二)常量
{
返回比较(第一,第二);
}
无效设置比较器(比较器和组件){
comp=comp;
}
}
//忘记了模板的语法。因此,有一个带有一个参数的模板
类比较器{
公众:
//建造师
//在子类上覆盖
虚拟布尔比较(T&first,T&second)=0;
}
通过这种配置,您可以轻松地添加一个方法,而无需修改方法,只需在程序执行的任何时刻设置正确的比较器。您的问题太模糊了。你能详细说明一下吗?举一个简单的例子,“最佳”对于这个问题意味着什么?我以前做过一些Java。我们可以使用比较器或比较器。我想知道如何用C++的工具来模拟比较器的行为。