Учитывая классСортировка списка общих указателей
class objects {
public:
bool compareArea (const objects& obj) const { return this->area < obj.area; }
private:
double area;
};
Я хочу, чтобы отсортировать
list<shared_ptr<objects>> myObjects;
Я не могу использовать лямбда (с поддержкой моего ToolChain в C++ 11 является неполным). Таким образом, я пробовал следующее:
using namespace placeholders;
myObjects.sort(bind(&objects::compareArea,_1,_2));
Эта строка вызывается из другого файла (не из класса!). Проблема в том, что compareArea
требует ввода двух objects
. Но я даю два общих указателя на objects
. Есть ли простой способ включения разыменования указателей вsort
-call? Я хочу, чтобы функция objects::compareArea(..)
оставалась такой, какой она есть. Я не хотят такого рода решения
bool compareArea (const shared_ptr<objects>& ptr1, const shared_ptr<objects>& ptr2) {
return ptr1->area > ptr2->area;
}
// in same source-file:
myObjects.sort(bind(compareArea,_1,_2));
где compareArea
не является членом-функцией objects
. На самом деле, мое любимое решение было бы перегрузкой оператора <
.
Который '' bind' и placeholders' вы используете? Это может также оказать поддержку выражениям, которые вам нужны. – Angew
Как насчет 'bool lessObject (const shared_ptr & lhs, const shared_ptr & rhs) {return lhs-> compareArea (* rhs); } '? –
Jarod42
@Angew Я не совсем понимаю ваш вопрос ... Я использую std :: bind, а заполнители - '_1' и '_2', как указано в фрагменте кода выше. – Kapa11