У меня есть два вопроса, связанных с функциональными объектами и указателями на функции,
Вопрос: 1
Когда я читаю различные алгоритмы использования sort
STL, я вижу, что третий параметр может быть функциональным объектом, ниже приведен пример
class State {
public:
//...
int population() const;
float aveTempF() const;
//...
};
struct PopLess : public std::binary_function<State,State,bool> {
bool operator ()( const State &a, const State &b ) const
{ return popLess( a, b ); }
};
sort( union, union+50, PopLess() );
Вопрос:
Теперь, как работает утверждение, sort(union, union+50,PopLess())
? PopLess()
должен быть преобразован во что-то вроде PopLess tempObject.operator()
, что будет похоже на выполнение функции operator ()
для временного объекта. Я вижу это как передачу возвращаемого значения перегруженной операции, т.е. bool
(как в моем примере) алгоритму sort
.
Итак, как функция сортировки разрешает третий параметр в этом случае?
Вопрос: 2
Вопрос
Получаем ли мы какое-то конкретное преимущество от использования функциональных объектов по сравнению с указателем на функцию? Если мы воспользуемся указателем функции, приведенным ниже, он выведет какое-либо отключение?
inline bool popLess( const State &a, const State &b )
{ return a.population() < b.population(); }
std::sort( union, union+50, popLess ); // sort by population
PS: Обе вышеупомянутые ссылки (включая пример) взяты из книги «С ++:« Общие знания: основное промежуточное программирование »» Стивена С. Дьюхерста.
Я не смог расшифровать содержание темы, поэтому написал для справки.
Заранее спасибо за помощь.