std::function<R(Args...)>::function
function()noexcept; | (1) | (начиная с C++11) |
function(std::nullptr_t)noexcept; | (2) | (начиная с C++11) |
function(const function& other ); | (3) | (начиная с C++11) |
(4) | ||
function( function&& other ); | (начиная с C++11) (до C++20) | |
function( function&& other )noexcept; | (начиная с C++20) | |
template<class F > function( F&& f ); | (5) | (начиная с C++11) |
template<class Alloc > function(std::allocator_arg_t, const Alloc& alloc )noexcept; | (6) | (начиная с C++11) (удалено в C++17) |
template<class Alloc > function(std::allocator_arg_t, const Alloc& alloc, | (7) | (начиная с C++11) (удалено в C++17) |
template<class Alloc > function(std::allocator_arg_t, const Alloc& alloc, | (8) | (начиная с C++11) (удалено в C++17) |
template<class Alloc > function(std::allocator_arg_t, const Alloc& alloc, | (9) | (начиная с C++11) (удалено в C++17) |
template<class F, class Alloc > function(std::allocator_arg_t, const Alloc& alloc, F f ); | (10) | (начиная с C++11) (удалено в C++17) |
Создаёт std::function
из различных источников.
std::function
, *this после вызова будет пустым. Этот конструктор не участвует в разрешении перегрузки, если целевой тип не совпадает с function
, а его lvalue равно Callable для типов аргументов Args...
и возвращаемого типа R
. Программа некорректна, если целевой тип не является копируемым или инициализация цели некорректна.function
.Когда целью является указатель на функцию или std::reference_wrapper, оптимизация малых объектов гарантируется, то есть эти цели всегда хранятся непосредственно внутри объекта std::function, динамическое размещение не происходит. Другие большие объекты могут быть созданы в динамически выделенной памяти и доступны для объекта std::function через указатель.
Содержание |
[править]Параметры
other | — | объект function, используемый для инициализации *this |
f | — | вызываемый объект, используемый для инициализации *this |
alloc | — | Allocator, используемый для выделения внутренней памяти |
Требования к типам | ||
-std::decay<F>::type должен соответствовать требованиям Callable и CopyConstructible. | ||
-Alloc должен соответствовать требованиям Allocator. |
[править]Исключения
4) Не генерирует исключение, если цель объекта other является указателем на функцию или std::reference_wrapper, иначе может сгенерировать std::bad_alloc или любое другое исключение, созданное конструктором, используемым для копирования или перемещения сохранённого вызываемого объекта. | (до C++20) |
[править]Примечание
Поддержка аллокатора объекта std::function
была плохо определена и реализована непоследовательно. Некоторые реализации вообще не предоставляют перегрузок (6-10), некоторые предоставляют перегрузки, но игнорируют предоставленный аргумент аллокатора, а некоторые предоставляют перегрузки и используют предоставленный аллокатор для создания, но не для переназначения std::function
. В результате поддержка аллокатора была удалена в C++17.
[править]Пример
Этот раздел не завершён Причина: нет примера |
[править]Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
Номер | Применён | Поведение в стандарте | Корректное поведение |
---|---|---|---|
LWG 2132 | C++11 | конструктор, принимающий объект Callable, может быть неоднозначным | ограничено |
LWG 2774 | C++11 | конструктор, принимающий Callable, выполнял дополнительное перемещение | устранено |
[править]Смотрите также
(C++23) | создаёт новый объект std::move_only_function (public функция-элемент std::move_only_function ) |