У меня есть класс с функциейPass пользовательского компаратор через функцию
MyClass::doStuff(std::vector<MyCustomData*> toSort) { ...
, в которых я называю
std::sort(toSort.begin(), toSort.end(), MyClass::SortByZ());
MyClass :: SortByZ() обычай компаратор. Теперь это работает, но я хотел бы достичь:
У меня есть несколько классов, каждый из которых должен иметь свой собственный функтор компаратора для сортировки «MyCustomData». Так, например, Class1 ... должны иметь
class Class1 {
struct SortData {
bool operator()(MyCustomData *lhs, MyCustomData *rhs) {
return lhs->something1 > rhs->something1;
}
};
//...many more functions/vars
}
в то время как Class2 имеет другой компаратор функтор для того же типа данных, например,
class Class2 {
struct SortData {
bool operator()(MyCustomData *lhs, MyCustomData *rhs) {
return lhs->something2 > rhs->something2;
}
};
//...many more functions/vars
}
Теперь я хотел бы иметь возможность вызвать функцию MyClass :: DoStuff (.. .) либо с
doStuff(myData, Class1::SortData)
или
doStuff(myData, Class2::SortData)
и функция MyClass :: doStuff (...) должна использовать соответствующий порядок сортировки.
Я не нашел способ сделать это, есть ли он? Я хотел бы простое решение (не нужно поддерживать шаблоны или что-то еще). Я был бы готов использовать boost, если бы мне это было нужно, но было бы предпочтительным решение без повышения.
Надеюсь, я смог описать, чего я хочу достичь? Спасибо за любую помощь!
Если ваш 'vector' хранит объекты MyCustomData', а не указатели, функторы' SortData' должны иметь другую подпись: 'bool operator() (MyCustomData const & lhs, MyCustomData const & rhs)'. –
Извините, я не знал об этом. Вектор хранит указатели, поэтому вектор, поэтому работает сигнатура функтора. –
Ela782