我正在开发一个系统,我需要能够按给定谓词对向量进行排序,而我的类不应该控制该谓词。基本上,我向他们传递了一个派生类,他们盲目地对其进行排序。
作为“令人愉快的怪癖”之一,排序模式之一是进入顺序。这是我到目前为止所得到的。
struct Strategy
{
virtual bool operator()(const Loan& lhs, const Loan& rhs) const = 0;
};
struct strategyA : public Strategy
{
bool operator()(const Loan& lhs, const Loan& rhs) const
{
return true;
}
};
struct strategyB : public Strategy
{
bool operator()(const Loan& lhs, const Loan& rhs) const
{
return lhs.getID() > rhs.getID();
}
};
struct strategyC : public Strategy
{
bool operator()(const Loan& lhs, const Loan& rhs) const
{
return lhs.getFee() > rhs.getFee();
}
};
显然,由于 strategyA 是自反的,所以不能使用它,如果我将其设置为 false,它将平等对待一切,我可以和我的数据告别。
所以这是我的问题。有没有一种方法可以定义一个谓词函数来对一个不会改变任何东西的向量进行排序?
我知道最简单的解决方案可能是向 Loan 类添加一个输入顺序变量,或者将其与一对中的一个配对。或者,我可以在谓词中输入一个参数,告诉排序器是否使用它。