Я работаю в системе, где мне нужно иметь возможность сортировать вектор по заданному предикату, который мои классы не должны контролировать.По сути, я передаю им производный класс, и они слепо сортируют его.
Как одна из «восхитительных причуд», одним из шаблонов сортировки является порядок входа.Вот что у меня так далеко.
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();
}
};
Очевидно, что стратегия A рефлексивна, ее нельзя использовать, и если я установлю ее в false, она будет относиться ко всем как к равным, и я могупоцелуй мои данные до свидания.
Так вот мой вопрос.Есть ли способ определения функции предиката для сортировки вектора, который ничего не изменит?
Я знаю, что, возможно, самое простое решение - это добавить переменную порядка входа в класс Loan или стать партнером по нему.с одним в паре.В качестве альтернативы я мог бы передать параметр с помощью предиката, который сообщает сортировщику, использовать его или нет.