Как вызвать функцию при использовании конструктора карты?

#c

#c

Вопрос:

Я нашел этот код здесь . Как компилятор узнает, что нужно использовать функцию, определенную в classcomp?

структура / функция

 struct classcomp 
  {
  bool operator() (const charamp; lhs, const charamp; rhs) const
    {
    return lhs<rhs;
    }
  };
  

Построение карты

   map<char,int,classcomp> fourthm;
  

Прототипы конструкторов по ссылке выше:

 explicit map ( const Compareamp; comp = Compare(),const Allocatoramp; = Allocator() );

template <class InputIterator> map ( InputIterator first, InputIterator last,const Compareamp; comp = Compare(), const Allocatoramp; = Allocator() );

map ( const map<Key,T,Compare,Allocator>amp; x );
  

Комментарии:

1. en.wikipedia.org/wiki/Function_object#In_C_and_C.2B.2B

2. таким образом, оператор вызова функции перегружен

3. В вашем приведенном примере используется classcomp() … в то время как приведенный выше пример дает classcomp … какой из них правильный

4. @Chris: Они оба есть, в разных контекстах. В его примере создается экземпляр типа для его использования, в вашем примере просто указывается тип в качестве аргумента шаблона (и вызов map конструктора неявно создает его экземпляр).

Ответ №1:

Он использует конструктор по умолчанию для класса classcomp, поэтому вы получаете объект, который имеет определенный operator() и действует как функция.

Комментарии:

1. таким образом, оператор вызова функции перегружен

2. Все, к чему вы можете применить оператор вызова функции, является функтором. Функция является функтором, объект типа класса with operator() является функтором, объект, который имеет преобразование в указатель на функцию, является функтором.

3. Почему в приведенном мной примере нет функции ()? В примере, который предоставил Дейв

4. @Chris : Есть — это в аргументах map конструктора, const Compareamp; comp = Compare() .