Пространства имён
Варианты
Действия

std::function<R(Args...)>::function

Материал из cppreference.com
< cpp‎ | utility‎ | functional‎ | function
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм(C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования(C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
Объекты функции
Функции обёртки
(C++11)
(C++11)
Применение частичных функций
(C++20)(C++23)
(C++11)
Вызов функции
(C++17)(C++23)
Объект идентичности функции
(C++20)
Обёртки ссылок
(C++11)(C++11)
Прозрачные обёртки операторов
(C++14)
(C++14)
(C++14)
(C++14)  
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
Отрицатели
(C++17)
Искатели
Ограниченные компараторы
Старые привязки и адаптеры
(до C++17*)
(до C++17*)
(до C++17*)
(до C++17*)
(до C++17*)(до C++17*)(до C++17*)(до C++17*)
(до C++20*)
(до C++20*)
(до C++17*)(до C++17*)
(до C++17*)(до C++17*)

(до C++17*)
(до C++17*)(до C++17*)(до C++17*)(до C++17*)
(до C++20*)
(до C++20*)
 
 
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,

          std::nullptr_t)noexcept;
(7) (начиная с C++11)
(удалено в C++17)
template<class Alloc >

function(std::allocator_arg_t, const Alloc& alloc,

          const function& other );
(8) (начиная с C++11)
(удалено в C++17)
template<class Alloc >

function(std::allocator_arg_t, const Alloc& alloc,

          function&& other );
(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 из различных источников.

1,2) Создаёт пустую функцию.
3,4) Копирует (3) или перемещает (4)цель объекта other в цель объекта *this. Если otherпустой, *this после вызова будет тоже пустым. Для (4), other после вызова находится в допустимом, но неопределённом состоянии.
5) Инициализирует цель с помощью std::forward<F>(f). Цель имеет тип std::decay<F>::type. Если f является нулевым указателем на функцию, нулевым указателем на элемент или пустым значением некоторой специализации std::function, *this после вызова будет пустым. Этот конструктор не участвует в разрешении перегрузки, если целевой тип не совпадает с function, а его lvalue равно Callable для типов аргументов Args... и возвращаемого типа R. Программа некорректна, если целевой тип не является копируемым или инициализация цели некорректна.
6-10) То же, что и (1-5), за исключением того, что alloc используется для выделения памяти для любых внутренних структур данных, которые может использовать function.

Когда целью является указатель на функцию или std::reference_wrapper, оптимизация малых объектов гарантируется, то есть эти цели всегда хранятся непосредственно внутри объекта std::function, динамическое размещение не происходит. Другие большие объекты могут быть созданы в динамически выделенной памяти и доступны для объекта std::function через указатель.

Содержание

[править]Параметры

other объект function, используемый для инициализации *this
f вызываемый объект, используемый для инициализации *this
alloc Allocator, используемый для выделения внутренней памяти
Требования к типам
-
std::decay<F>::type должен соответствовать требованиям Callable и CopyConstructible.
-
Alloc должен соответствовать требованиям Allocator.

[править]Исключения

3,8,9) Не генерирует исключение, если цель объекта other является указателем на функцию или std::reference_wrapper, иначе может сгенерировать std::bad_alloc или любое другое исключение, созданное конструктором, используемым для копирования или перемещения сохранённого вызываемого объекта.
4) Не генерирует исключение, если цель объекта other является указателем на функцию или std::reference_wrapper, иначе может сгенерировать std::bad_alloc или любое другое исключение, созданное конструктором, используемым для копирования или перемещения сохранённого вызываемого объекта.
(до C++20)
5,10) Не генерирует исключение, если f является указателем на функцию или std::reference_wrapper, иначе может сгенерировать std::bad_alloc или любое исключение, сгенерированное конструктором копирования сохранённого вызываемого объекта.

[править]Примечание

Поддержка аллокатора объекта std::function была плохо определена и реализована непоследовательно. Некоторые реализации вообще не предоставляют перегрузок (6-10), некоторые предоставляют перегрузки, но игнорируют предоставленный аргумент аллокатора, а некоторые предоставляют перегрузки и используют предоставленный аллокатор для создания, но не для переназначения std::function. В результате поддержка аллокатора была удалена в C++17.

[править]Пример

[править]Отчёты о дефектах

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

Номер Применён Поведение в стандарте Корректное поведение
LWG 2132 C++11 конструктор, принимающий объект Callable, может быть неоднозначным ограничено
LWG 2774 C++11 конструктор, принимающий Callable, выполнял дополнительное перемещение устранено

[править]Смотрите также

создаёт новый объект std::move_only_function
(public функция-элемент std::move_only_function)[править]
close