Наличие объектов функции автоопределения типа в C++
Я хотел отсортировать вектор, содержащий целые числа, в обратном порядке, но так как я привык к такому типу дедукции в C++, я передал объект функции больше<>(), не указав int, что еще это может быть? Это не работало с использованием g++, но работало с компилятором Visual Studio, однако я заметил, что Visual Studio использовал void (не уверен, что это нормально). Возможен ли для объекта функции автоматический вывод типов, почему или почему нет? Если нет, то есть ли обходной путь, так как типы могут долго печатать?
2 ответа
Эта функция была введена в C++14 (которая поддерживается g++5.1 и может быть активирована путем передачи -std=c++14
флаг).
Если вы не укажете тип, компилятор выберет тип по умолчанию (void
) для которой существует специализация. Эта специализация имеет шаблон operator()
Функция-член, для которой типы параметров затем определяются компилятором в соответствии с типом значения итератора.
Есть специализация std::greater<void>
, void
быть аргументом шаблона по умолчанию std::greater<class T>
начиная с C++14.
Эта специализация просто реализует x > y
, выводящий аргумент и возвращаемый тип.