У меня есть класс с функцией
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)
or
doStuff(myData, Class2::SortData)
и функция MyClass::doStuff(...) должна использовать соответствующий Sort-Order.
Я не нашел способ сделать это, есть ли он? Мне нужно простое решение (не нужно поддерживать шаблоны или что-то в этом роде). Я был бы готов использовать boost, если бы мне это было нужно, но решение без boost было бы предпочтительнее.
Надеюсь, я смог описать, чего я хочу достичь? Спасибо за любую помощь!
vector
хранитMyCustomData
объекты, а не указатели, вашиSortData
функторы должны иметь другую подпись:bool operator()(MyCustomData const & lhs, MyCustomData const & rhs)
. - person Luc Touraille   schedule 20.04.2012