C++11 Передача функции-члена класса как компаратора

Есть класс Tree в нем есть vector<Path*> и его нужно отсортировать. Написал компаратор:

bool Tree::PathComparator(Path* a, Path* b)
{
    return a->GetPath() < b->GetPath();
}

Попытался отсортировать

sort(pathes.begin(), pathes.end(), PathComparator);

выдает ошибку:

error C3867: Tree::PathComparator: в вызове функции отсутствует список аргументов; используйте "&Tree::PathComparator" для создания указателя на член

error C2780: void std::sort(_RanIt,_RanIt): требует аргументов: 2, имеется: 3

Но если сделать компаратор обычной функцией, а не членом класса, то все работает. И мне стало интересно почему так?


Ответы (1 шт):

Автор решения: AR Hovsepyan

Функция_член bool Tree::PathComparator(Path* a, Path* b) (и любая другая функция_член класса) неявно получает в свой первый аргумент объект *this, то есть, в данном случаи у вас будет в аргументах (Tree&, Path* a, Path* b). Это есть основное отличие функции_члена от свободной(обычной по вашему определению) функции.

В таких случаях проще определить оператор <для класса, и компаратор не нужно будет передавать: Но если нужно сравнивать указатели, это значит, что, скорее всего, вы что то делаете не так

→ Ссылка