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 шт):
Функция_член bool Tree::PathComparator(Path* a, Path* b) (и любая другая функция_член класса) неявно получает в свой первый аргумент объект *this, то есть, в данном случаи у вас будет в аргументах (Tree&, Path* a, Path* b). Это есть основное отличие функции_члена от свободной(обычной по вашему определению) функции.
В таких случаях проще определить оператор <для класса, и компаратор не нужно будет передавать: Но если нужно сравнивать указатели, это значит, что, скорее всего, вы что то делаете не так