<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++