<functional>

Определяет функции стандартной библиотеки C++, которые помогают создавать объекты функций, также известные как воронки и их привязыватели. Объект-функция — это объект типа, который определяет operator(). Объект-функция может быть указателем на функцию, но, как правило, он используется для хранения дополнительных сведений, которые могут потребоваться при вызове функции.

Требования

Заголовок:<функциональный>

Пространство имен: std

Замечания

Алгоритмы требуют двух типов объектов-функций: унарных и двоичных объектов. Унарным объектам-функциям требуется один аргумент, и бинарным — два аргумента. Объект-функция и указатели на функции могут передаваться как предикат для алгоритма, но объекты-функции также могут настраиваться и расширяют область, а также повышают гибкость и эффективность стандартной библиотеки C++. Если, например, требуется привязать значение к функции перед передачей алгоритму, указатель на функцию не может использоваться. Адаптеры функций преобразуют указатели на функции в гибкие объекты-функции, которые можно привязать к значению. Функциональный> заголовок <также содержит адаптеры функций-членов, которые позволяют вызывать функции-члены в качестве адаптируемых объектов функций. Функции могут настраиваться, если у них есть объявления вложенных типов, указывающие типы аргументов и типы возвращаемого значения. Объекты-функции и их адаптеры позволяют стандартной библиотеке C++ обновить существующие приложения и облегчают интеграцию библиотеки в среду программирования C++.

Реализация объектов функции в <функциональном> режиме включает в себя прозрачные воронки операторов, которые являются специализациями стандартных объектов функций и не принимают параметров шаблона, и выполняют идеальную пересылку аргументов функции и идеальный возврат результата. Эти специализации шаблона не требуют указывать типы аргументов при вызове функторов арифметических операций, операций сравнения, логических операций и функторов побитовых операторов. Вы можете перегружать арифметические, логические, побитовые операторы и операторы сравнения для собственных типов или сочетания разнородных типов, а затем использовать прозрачные функторы операторов в качестве аргументов функции. Например, если тип MyType реализует operator<, вы можете вызвать sort(my_collection.begin(), my_collection.end(), less<>()) вместо явного указания типа sort(my_collection.begin(), my_collection.end(), less<MyType>()).

Следующие функции добавляются в C++11, C++14 и C++17:

  • Сигнатура вызова — имя типа возвращаемого значения, за которым следует список разделенных запятыми из нуля или более типов аргументов, заключенный в круглые скобки.

  • Вызываемый тип — это указатель на функцию, указатель на функцию-член, указатель на данные-член или тип класса, объекты которого могут размещаться непосредственно слева от оператора вызова функции.

  • Вызываемый объект — это объект вызываемого типа.

  • Тип оболочки вызова — это тип, который содержит вызываемый объект и поддерживает операцию вызова, которая перенаправляет на этот объект.

  • Оболочка вызова — это объект типа оболочки вызова.

  • Целевой объект — это вызываемый объект, который содержится в объекте оболочки вызова.

Псевдофункция INVOKE(f, t1, t2, ..., tN) означает одно из следующего:

  • (t1.*f)(t2, ..., tN), если f — это указатель на функцию-член класса T, а t1 — это объект типа T, ссылка на объект типа T или ссылка на объект типа, производного от T.

  • ((*t1).*f)(t2, ..., tN), если f — это указатель на функцию-член класса T, а t1 не является одним из типов, описанных в предыдущем пункте.

  • t1.*f, если N == 1, а f — это указатель на данные-член класса T и t1 — это объект типа T, ссылка на объект типа T или ссылка на объект типа, производного от T.

  • (*t1).*f, если N == 1, а f — это указатель на данные-член класса T и t1 не является одним из типов, описанных в предыдущем пункте.

  • В остальных случаях — f(t1, t2, ..., tN).

Псевдофункция INVOKE(f, t1, t2, ..., tN, R) означает INVOKE(f, t1, t2, ..., tN), неявно преобразованный в R.

Если у оболочки вызова есть слабый результирующий тип, тип его члена result_type основан на типе T целевого объекта оболочки, как показано ниже:

  • Если T — указатель на функцию, result_type — это синоним возвращаемого типа T.

  • Если T — указатель на функцию-член, result_type — это синоним возвращаемого типа T.

  • Если T — тип класса с типом члена result_type, result_type — это синоним T::result_type.

  • В противном случае член result_type не существует.

У каждой оболочки вызова есть конструктор перемещения и конструктор копирования. Простая оболочка вызова — это оболочка с оператором присваивания, конструктор копирования, конструктор перемещения и оператор присваивания которой не вызывают исключений. Пересылающая оболочка вызова — это оболочка, которая может вызываться с помощью списка произвольных аргументов и которая предоставляет аргументы вызываемому объекту в оболочке в виде ссылок. Все аргументы rvalue предоставляются как ссылки rvalue, а аргументы lvalue — как ссылки lvalue.

Участники

Классы

Имя Описание
bad_function_call Класс, который описывает исключение, указывающий, что вызов operator() в объекте-function завершился ошибкой, так как объект был пуст.
binary_negate Шаблон класса, предоставляющий функцию-член, которая отрицает возвращаемое значение указанной двоичной функции.
(Не рекомендуется в C++17.)
binder1st Шаблон класса, предоставляющий конструктор, который преобразует двоичный объект функции в унарный объект функции путем привязки первого аргумента двоичной функции к указанному значению.
(Не рекомендуется использовать C++11, удалено в C++17.)
binder2nd Шаблон класса, предоставляющий конструктор, который преобразует двоичный объект функции в унарный объект функции путем привязки второго аргумента двоичной функции к указанному значению.
(Не рекомендуется использовать C++11, удалено в C++17.)
boyer_moore_horspool_searcher
boyer_moore_searcher
const_mem_fun_ref_t Класс адаптера, который позволяет вызывать функцию-член-константу, не принимающую аргументы, как объект унарной функции при инициализации с ссылочным аргументом.
(Не рекомендуется использовать C++11, удалено в C++17.)
const_mem_fun_t Класс адаптера, который позволяет вызывать функцию-член-константу, не принимающую аргументы, как объект унарной функции при инициализации с аргументом указателя.
(Не рекомендуется использовать C++11, удалено в C++17.)
const_mem_fun1_ref_t Класс адаптера, который позволяет вызывать функцию-член-константу, принимающую один аргумент, как объект бинарной функции при инициализации с ссылочным аргументом.
(Не рекомендуется использовать C++11, удалено в C++17.)
const_mem_fun1_t Класс адаптера, который позволяет вызывать функцию-член-константу, принимающую один аргумент, как объект бинарной функции при инициализации с аргументом указателя.
(Не рекомендуется использовать C++11, удалено в C++17.)
default_searcher
function Класс, создающий оболочку для вызываемого объекта.
hash Класс, который вычисляет хэш-код для значения.
is_bind_expression Класс, который проверяет, можно ли создать определенный тип, вызывая bind.
is_placeholder Класс, который проверяет, является ли определенный тип заполнителем.
mem_fun_ref_t Класс адаптера, который позволяет non_const функции-члену без аргументов вызываться как унарный объект функции при инициализации с помощью ссылочного аргумента.
(Не рекомендуется использовать C++11, удалено в C++17.)
mem_fun_t Класс адаптера, который позволяет non_const функции-члену без аргументов вызываться как унарный объект функции при инициализации с аргументом указателя.
(Не рекомендуется использовать C++11, удалено в C++17.)
mem_fun1_ref_t Класс адаптера, который позволяет non_const функции-члену, принимающую один аргумент, вызываться как двоичный объект функции при инициализации с помощью ссылочного аргумента.
(Не рекомендуется использовать C++11, удалено в C++17.)
mem_fun1_t Класс адаптера, который позволяет non_const функции-члену, принимающую один аргумент, вызываться как двоичный объект функции при инициализации с аргументом указателя.
(Не рекомендуется использовать C++11, удалено в C++17.)
pointer_to_binary_function Преобразует указатель на бинарную функцию в адаптируемую бинарную функцию.
(Не рекомендуется использовать C++11, удалено в C++17.)
pointer_to_unary_function Преобразует указатель на унарную функцию в адаптируемую унарную функцию.
(Не рекомендуется использовать C++11, удалено в C++17.)
reference_wrapper Класс, который создает оболочку для ссылки.
unary_negate Шаблон класса, предоставляющий функцию-член, которая отрицает возвращаемое значение указанной унарной функции.
(Не рекомендуется в C++17.)

Функции

Имя Описание
bind Привязывает аргументы к вызываемому объекту.
bind1st Вспомогательная функция шаблона, которая создает адаптер для преобразования объекта бинарной функции в объект унарной функции, привязывая первый аргумент бинарной функции к указанному значению.
(Не рекомендуется использовать C++11, удалено в C++17.)
bind2nd Вспомогательная функция шаблона, которая создает адаптер для преобразования объекта бинарной функции в объект унарной функции, привязывая второй аргумент бинарной функции к указанному значению.
(Не рекомендуется использовать C++11, удалено в C++17.)
bit_and Возвращает битовое значение AND (двоичное operator&) двух параметров.
bit_not Возвращает битовое дополнение (operator~) параметра.
(Добавлено в C++14.)
bit_or Возвращает битовую ИЛИ (operator|) двух параметров.
bit_xor Возвращает битовое XOR (operator^) двух параметров.
cref Создает конструкцию reference_wrapper из аргумента.
invoke
mem_fn Создает простую оболочку вызова.
mem_fun Вспомогательные функции шаблона, которые используются для создания адаптеров объекта-функции для функций-членов при инициализации с аргументами указателя.
(Не рекомендуется использовать C++11, удалено в C++17.)
mem_fun_ref Вспомогательная функция шаблона, которая используется для создания адаптеров объекта-функции для функций-членов при инициализации с ссылочными аргументами.
not1 Возвращает дополнение унарного предиката.
(Не рекомендуется в C++17.)
not2 Возвращает дополнение бинарного предиката.
(Не рекомендуется в C++17.)
not_fn Возвращает дополнение результата объекта функции.
(Добавлено в C++17.)
ptr_fun Вспомогательная функция шаблона, которая используется для преобразования указателей на унарные и бинарные функция в унарные и бинарные адаптируемые функции соответственно.
(Не рекомендуется использовать C++11, удалено в C++17.)
ref; Создает reference_wrapper из аргумента.
swap Меняет местами два объекта function.

Структуры

Имя Описание
binary_function Пустой базовый класс, определяющий типы, которые могут наследоваться производным классом, предоставляющим объект бинарной функции.
(Не рекомендуется использовать C++11, удалено в C++17.)
divides Этот класс предоставляет стандартный объект-функцию, который выполняет арифметическую операцию деления элементов заданного типа значения.
equal_to Бинарный предикат, который проверяет, равно ли значение заданного типа другому значению этого типа.
greater Бинарный предикат, который проверяет, больше ли значение заданного типа другого значения этого типа.
greater_equal Бинарный предикат, который проверяет, больше или равно ли значение заданного типа другого значения этого типа.
less Бинарный предикат, который проверяет, меньше ли значение заданного типа другого значения этого типа.
less_equal Бинарный предикат, который проверяет, меньше или равно ли значение заданного типа другого значения этого типа.
logical_and Этот класс предоставляет стандартный объект-функцию, который применяет логическую операцию конъюнкции к элементам заданного типа значения и проверяет истинность или ложность результата.
logical_not Этот класс предоставляет стандартный объект-функцию, который применяет логическую операцию отрицания к элементам заданного типа значения и проверяет истинность или ложность результата.
logical_or Этот класс предоставляет стандартный объект-функцию, который применяет логическую операцию логического сложения к элементам заданного типа значения и проверяет истинность или ложность результата.
minus Этот класс предоставляет стандартный объект-функцию, который выполняет арифметическую операцию вычитания для элементов заданного типа значения.
остаток от деления Этот класс предоставляет стандартный объект-функцию, который выполняет арифметическую операцию модуля для элементов заданного типа значения.
multiplies Этот класс предоставляет стандартный объект-функцию, который выполняет арифметическую операцию умножения для элементов заданного типа значения.
negate Этот класс предоставляет стандартный объект-функцию, который возвращает отрицательное значение элемента.
not_equal_to Бинарный предикат, который проверяет, не равно ли значение заданного типа другому значению этого типа.
plus Этот класс предоставляет стандартный объект-функцию, который выполняет арифметическую операцию сложения для элементов заданного типа значения.
unary_function Пустой базовый класс, определяющий типы, которые могут наследоваться производным классом, предоставляющим объект унарной функции.
(Не рекомендуется использовать C++11, удалено в C++17.)

Объект

Имя Описание
_1.._M Заполнители для подстановочных аргументов.

Операторы

Имя Описание
operator== Запрещает сравнение вызываемых объектов на равенство.
оператор!= Запрещает сравнение вызываемых объектов на неравенство.

См. также

Справочник по файлам заголовков
Потокобезопасность в стандартной библиотеке C++
Справочник по стандартной библиотеке C++