Re: Как правильно использовать inplace_merge ?
От: uzhas Ниоткуда  
Дата: 25.06.10 10:40
Оценка: 2 (1)
Здравствуйте, Korchy, Вы писали:

K>Пробую так, получаю ошибку:

static bool Comp(Cls* A1,Cls* A2) {return A1->a1 < A2->a1};


попробуйте метод Comp сделать статическим или отдельной функцией, а не методом класса
Как правильно использовать inplace_merge ?
От: Korchy  
Дата: 25.06.10 10:37
Оценка:
Подскажите, пожалуйста, как правильно использовать 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 аргументов
Re[2]: Как правильно использовать inplace_merge ?
От: Korchy  
Дата: 25.06.10 11:04
Оценка:
Здравствуйте, uzhas, Вы писали:
U>попробуйте метод Comp сделать статическим или отдельной функцией, а не методом класса
Помогло, спасибо!
Получается implace_merge не работает с функциями-членами.
Re[3]: Как правильно использовать inplace_merge ?
От: K13 http://akvis.com
Дата: 25.06.10 11:42
Оценка:
Здравствуйте, Korchy, Вы писали:

U>>попробуйте метод Comp сделать статическим или отдельной функцией, а не методом класса

K>Помогло, спасибо!
K>Получается implace_merge не работает с функциями-членами.

Можно подсунуть функтор с перегруженным operator()
Re[3]: Как правильно использовать inplace_merge ?
От: Roman Odaisky Украина  
Дата: 28.06.10 09:03
Оценка:
Здравствуйте, 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).
До последнего не верил в пирамиду Лебедева.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.