Подскажите, пожалуйста, как правильно использовать inplace_merge для сложных объектов? Пробую так, получаю ошибку:
class Cls {
public:
int a1;
}
class Work {
public:
Work(void) {p = &Work::Comp;}
bool Comp(Cls* A1,Cls* A2) {return A1->a1 < A2->a1};
std::vector<Cls*> A;
typedef bool (Work::*p_type)(Cls*,Cls*);
p_type p;
void Add(*Cls C) {
A.push_back(C);
std::inplace_merge(A.begin(),A.end()-1,A.end(),p); // здесь получаю ошибку
}
}
текст ошибки:
error C2064: результатом вычисления фрагмента не является функция, принимающая 2 аргументов
Здравствуйте, Korchy, Вы писали:
K>Пробую так, получаю ошибку:
static bool Comp(Cls* A1,Cls* A2) {return A1->a1 < A2->a1};
попробуйте метод Comp сделать статическим или отдельной функцией, а не методом класса
Здравствуйте, Korchy, Вы писали:
U>>попробуйте метод Comp сделать статическим или отдельной функцией, а не методом класса
K>Помогло, спасибо!
K>Получается implace_merge не работает с функциями-членами.
Ну да. Подобные функции STL ожидают, что им передадут объект, который можно вызвать с двумя аргументами (что, собственно, и написано в сообщении об ошибке). А функции-члены имеют еще третий аргумент — неявный this.
Твою функцию
bool Work::Comp(Cls* A1, Cls* A2) { return A1->a1 < A2->a1; }
typedef bool (Work::*p_type)(Cls*,Cls*);
p_type p = &Work::Comp;
нельзя вызвать с двумя аргументами: p(A1, A2), а можно только с тремя: (work_object->*p)(A1, A2).