Объекты функции
Объект функция, это любой объект, для которого определён оператор вызова функции. C++ предоставляет множество встроенных объектов функций, а также поддержку для создания и управления новыми объектами функциями.
Содержание |
[править] Обёртки функций
std::function обеспечивает поддержку для хранения произвольных объектов функций.
| (C++11) |
обёртывает вызываемый объект любого типа с указанной сигнатурой вызова функции (шаблон класса) |
| (C++11) |
исключение, возникающее при вызове пустой std::function (класс) |
| (C++11) |
создаёт объект функции из указателя на элемент (шаблон функции) |
[править] Вызов функции
std::invoke может вызывать любой Callable объект с заданными аргументами.
| (C++17) (C++23) |
вызывает любой Callable объект с данными аргументами и имеет возможность указать тип возврата (начиная с C++23) (шаблон функции) |
[править] Идентичность
std::identity это объект функции идентификации: он возвращает свой аргумент без изменений.
| (C++20) |
объект функция, который возвращает свой аргумент без изменений (класс) |
[править] Частичное применение функции
std::bind_front и std::bind обеспечивают поддержку частичного применения функции, то есть привязку аргументов к функциям для создания новых функций.
| (C++20) |
связывает переменное количество аргументов по порядку с объектом функцией (шаблон функции) |
| (C++11) |
связывает один или несколько аргументов с объектом функцией (шаблон функции) |
| (C++11) |
указывает, что объект является выражением std::bind или может использоваться самостоятельно (шаблон класса) |
| (C++11) |
указывает, что объект является стандартным заполнителем или может использоваться самостоятельно (шаблон класса) |
| Определены в пространстве имён
std::placeholders | |
| (C++11) |
заполнители для несвязанных аргументов в выражении std::bind (константа) |
[править] Отрицатели
std::not_fn создаёт объект функции, который отрицает результат переданного ему вызываемого объекта.
| (C++17) |
создаёт объект функции, который возвращает дополнение результата объекта функции, который он содержит (шаблон функции) |
[править] Поисковые функции
Предусмотрены поисковые функции, реализующие несколько алгоритмов поиска по строкам, которые могут использоваться либо напрямую, либо с std::search.
| (C++17) |
реализация алгоритма поиска стандартной библиотеки C++ (шаблон класса) |
| (C++17) |
реализация алгоритма поиска Бойера-Мура (шаблон класса) |
| реализация алгоритма поиска Бойера-Мура-Хорспула (шаблон класса) | |
[править] Обёртки ссылок
Обёртки ссылок позволяют сохранять ссылочные аргументы в копируемых объектах функциях:
| (C++11) |
обёртка ссылок CopyConstructible и CopyAssignable (шаблон класса) |
| (C++11) (C++11) |
создаёт std::reference_wrapper с типом, выведенным из его аргумента (шаблон функции) |
| (C++20) (C++20) |
получает ссылочный тип, заключённый в std::reference_wrapper (шаблон класса) |
[править] Объекты функции операторы
C++ определяет несколько объектов функций, которые представляют общие арифметические и логические операции:
Арифметические операции | |
| объект функция, реализующий x + y (шаблон класса) | |
| объект функция, реализующий x - y (шаблон класса) | |
| объект функция, реализующий x * y (шаблон класса) | |
| объект функция, реализующий x / y (шаблон класса) | |
| объект функция, реализующий x % y (шаблон класса) | |
| объект функция, реализующий -x (шаблон класса) | |
Сравнения | |
| объект функция, реализующий x == y (шаблон класса) | |
| объект функция, реализующий x != y (шаблон класса) | |
| объект функция, реализующий x > y (шаблон класса) | |
| объект функции, реализующий x < y (шаблон класса) | |
| объект функция, реализующий x >= y (шаблон класса) | |
| объект функция, реализующий x <= y (шаблон класса) | |
Логические операции | |
| объект функция, реализующий x && y (шаблон класса) | |
| объект функция, реализующий x || y (шаблон класса) | |
| объект функция, реализующий !x (шаблон класса) | |
Побитовые операции | |
| объект функция, реализующий x & y (шаблон класса) | |
| объект функция, реализующий x | y (шаблон класса) | |
| объект функция, реализующий x ^ y (шаблон класса) | |
| (C++14) |
объект функция, реализующий ~x (шаблон класса) |
[править] Объекты функции ограниченного сравнения
C++20 определяет набор объектов функций ограниченного сравнения. Операторы равенства (ranges::equal_to и ranges::not_equal_to) требуют типы аргументов для модели equality_comparable_with. Операторы отношения (ranges::less, ranges::greater, ranges::less_equal и ranges::greater_equal) требуют типы аргументов модели totally_ordered_with. Оператору трёхстороннего сравнения требуется (compare_three_way) тип для модели three_way_comparable_with.
| (C++20) |
объект функция, реализующий x == y (класс) |
| (C++20) |
объект функция, реализующий x != y (класс) |
| (C++20) |
объект функция, реализующий x < y (класс) |
| (C++20) |
объект функция, реализующий x > y (класс) |
| (C++20) |
объект функция, реализующий x <= y (класс) |
| (C++20) |
объект функция, реализующий x >= y (класс) |
| (C++20) |
реализация объекта функции x <=> y (класс) |
[править] Старые привязки и адаптеры
Несколько утилит, которые обеспечивали раннюю функциональную поддержку, устарели в C++11 и удалены в C++17 (старые отрицатели устарели в C++17 и удалены в C++20):
Основа | |
| (устарело в C++11) (убрано в C++17) |
совместимый с адаптором базовый класс унарной функции (шаблон класса) |
| (deprecated in C++11) (убрано в C++17) |
совместимый с адаптером базовый класс двоичной функции (шаблон класса) |
Привязки | |
| (устарело в C++11)(убрано в C++17) |
объект функции, содержащий двоичную функцию и один из её аргументов (шаблон класса) |
| (устарело в C++11)(убрано в C++17) |
связывает один аргумент с двоичной функцией (шаблон функции) |
Адаптоты функций | |
| (устарело в C++11) (убрано в C++17) |
совместимая с адаптором обёртка для указателя на унарную функцию (шаблон класса) |
| (устарело в C++11) (убрано в C++17) |
совместимая с адаптором обёртка для указателя на двоичную функцию (шаблон класса) |
| (устарело в C++11) (убрано в C++17) |
создаёт совместимую с адаптором обёртку объекта функции из указателя на функцию (шаблон функции) |
| (устарело в C++11) (убрано в C++17) |
оболочка для указателя на нульарную или унарную функцию-элемент, вызываемую с указателем на объект (шаблон класса) |
| (устарело в C++11) (убрано в C++17) |
создаёт оболочку из указателя на функцию-элемент, вызываемую через указатель на объект (шаблон функции) |
| (устарело в C++11) (убрано в C++17) |
оболочка для указателя на нульарную или унарную функцию-элемент, вызываемую со ссылкой на объект (шаблон класса) |
| (устарело в C++11) (убрано в C++17) |
создаёт оболочку из указателя на функцию-элемент, вызываемую со ссылкой на объект (шаблон функции) |
| (устарело в C++17) (убрано в C++20) |
обёртка объекта функции, возвращающая дополнение к унарному предикату, содержащемуся в ней (шаблон класса) |
| (deprecated in C++17) (убрано в C++20) |
объект функции-обёртки, возвращающий дополнение к содержащемуся в нём двоичному предикату (шаблон класса) |
| (устарело в C++17) (убрано в C++20) |
создаёт пользовательский объект std::unary_negate (шаблон функции) |
| (устарело в C++17) (убрано в C++20) |
создаёт пользовательский объект std::binary_negate (шаблон функции) |

