Estoy trabajando en un sistema donde necesito poder ordenar un vector por un predicado dado, sobre el cual mis clases no deberían tener control. Básicamente, les paso una clase derivada y la clasifican ciegamente.¿Cómo puedo definir un tipo de "No hacer nada"?
Como uno de los "caprichos deliciosos", uno de los patrones de clasificación es el orden de entrada. Esto es lo que tengo hasta ahora.
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();
}
};
Obviamente, como strategyA es reflexiva, no puede ser utilizado, y si lo fijo a falso, que va a tratar todo como igual y me puede besar el adiós de datos.
Así que esta es mi pregunta. ¿Hay alguna manera de definir una función de predicado para clasificar un vector que NO cambiará nada?
Soy consciente de que posiblemente la solución más simple sea agregar una variable de orden de entrada a la clase de Préstamo, o asociarla con una en un par. Alternativamente, podría alimentar un parámetro con el predicado que le dice al clasificador si usarlo o no.
La 'Estrategia' no debe depender de los detalles de implementación de clasificación. No se puede confiar en 'Strategy' que se usará con algoritmo de ordenamiento estable. – Vlad
@Vlad: No me digas;) – Dario
Bueno, mi comentario fue dirigido a topicstarter. ;) – Vlad