Namespaces
Variants

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

From ru.cppreference.net
function ( ) noexcept ;
(1) (техническая спецификация библиотеки fundamentals)
function ( std:: nullptr_t ) noexcept ;
(2) (техническая спецификация библиотеки fundamentals)
function ( const function & other ) ;
(3) (техническая спецификация библиотеки fundamentals)
function ( function && other ) ;
(4) (техническая спецификация библиотеки fundamentals)
template < class F >
function ( F f ) ;
(5) (техническая спецификация библиотеки fundamentals)
(6)
template < class Alloc >
function ( std:: allocator_arg_t , const Alloc & alloc ) noexcept ;
(техническая спецификация библиотеки fundamentals)
function ( std:: allocator_arg_t ,
const allocator_type & alloc ) noexcept ;
(техническая спецификация библиотеки fundamentals v3)
(7)
template < class Alloc >

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

std:: nullptr_t ) noexcept ;
(библиотека fundamentals TS)
function ( std:: allocator_arg_t , const allocator_type & alloc,
std:: nullptr_t ) noexcept ;
(библиотека fundamentals TS v3)
(8)
template < class Alloc >

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

const function & other ) ;
(техническая спецификация библиотеки fundamentals)
function ( std:: allocator_arg_t , const allocator_type & alloc,
const function & other ) ;
(техническая спецификация библиотеки fundamentals v3)
(9)
template < class Alloc >

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

function && other ) ;
(техническая спецификация библиотеки fundamentals)
function ( std:: allocator_arg_t , const allocator_type & alloc,
function && other ) ;
(техническая спецификация библиотеки fundamentals v3)
(10)
template < class F, class Alloc >
function ( std:: allocator_arg_t , const Alloc & alloc, F f ) ;
(TS библиотечных фундаментальных компонентов)
function ( std:: allocator_arg_t , const allocator_type & alloc, F f ) ;
(TS библиотечных фундаментальных компонентов v3)

Создает объект std::experimental::function из различных источников.

1,2) Создает пустую функцию.
3) Копирует target из other в target объекта * this . Если other является empty , * this также станет empty после вызова.
4) Перемещает целевой объект из other в целевой объект для * this . Если other является пустым , * this также станет пустым после вызова. После конструирования, * this сохраняет копию other. get_allocator ( ) . (library fundamentals TS v3)
5) Инициализирует целевой объект копией f . Если f является нулевым указателем на функцию или нулевым указателем на член, * this будет пустым после вызова. Этот конструктор не участвует в разрешении перегрузки, если f не является Callable для типов аргументов Args... и возвращаемого типа R .
6-10) То же, что и (1-5) за исключением того, что alloc используется для выделения памяти для любых внутренних структур данных, которые function может использовать. Эти конструкторы рассматривают alloc как стираемый тип аллокатора (см. ниже). (до TS библиотечных основ v3)

После создания через (1-5) , this - > get_memory_resource ( ) возвращает то же значение, что и std:: experimental :: pmr :: get_default_resource ( ) во время создания.

(library fundamentals TS)
(until library fundamentals TS v3)

После создания через (1-3) и (5) , * this хранит созданный по умолчанию std:: pmr :: polymorphic_allocator <> .

(library fundamentals TS v3)

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

Если конструктор перемещает или копирует функциональный объект, включая экземпляр std::experimental::function , то это перемещение или копирование выполняется через using-allocator construction с аллокатором this - > get_memory_resource ( ) (until library fundamentals TS v3) this - > get_allocator ( ) (library fundamentals TS v3) .

Содержание

Аллокатор с стиранием типа

Конструкторы function принимающие аргумент аллокатора alloc рассматривают этот аргумент как типонезависимый аллокатор. Указатель на ресурс памяти, используемый function для выделения памяти, определяется с использованием аргумента аллокатора (если он указан) следующим образом:

Тип alloc Значение указателя на ресурс памяти
Отсутствует (аллокатор не указан при конструировании) Значение std:: experimental :: pmr :: get_default_resource ( ) на момент конструирования.
std::nullptr_t Значение std:: experimental :: pmr :: get_default_resource ( ) на момент конструирования.
Тип указателя, приводимый к
std:: experimental :: pmr :: memory_resource *
static_cast < std:: experimental :: pmr :: memory_resource * > ( alloc )
Специализация
std::experimental::pmr::polymorphic_allocator
alloc. resource ( )
Любой другой тип, удовлетворяющий Allocator требованиям Указатель на значение типа std:: experimental :: pmr :: resource_adaptor < A > ( alloc ) , где A - тип alloc . Указатель действителен только в течение времени жизни function объекта.
Ни один из вышеперечисленных Программа некорректна.

Параметры

other - функциональный объект, используемый для инициализации * this
f - вызываемый объект, используемый для инициализации * this
alloc - аллокатор, используемый для внутреннего выделения памяти
Требования к типам
-
F должен удовлетворять требованиям Callable и CopyConstructible .

Исключения

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

Пример