Namespaces
Variants

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

From cppreference.net
(注:指定されたHTML要素内には翻訳対象となるテキストコンテンツが含まれていないため、出力は入力と同一となります。HTMLタグ、属性、および構造はすべて原文のまま保持されています。)
function ( ) noexcept ;
(1) (ライブラリファンダメンタルTS)
function ( std:: nullptr_t ) noexcept ;
(2) (ライブラリファンダメンタルTS)
function ( const function & other ) ;
(3) (ライブラリファンダメンタルTS)
function ( function && other ) ;
(4) (ライブラリファンダメンタルTS)
template < class F >
function ( F f ) ;
(5) (ライブラリファンダメンタルTS)
(6)
template < class Alloc >
function ( std:: allocator_arg_t , const Alloc & alloc ) noexcept ;
(ライブラリファンダメンタルTS)
function ( std:: allocator_arg_t ,
const allocator_type & alloc ) noexcept ;
(ライブラリファンダメンタルTS v3)
(7)
template < class Alloc >

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

std:: nullptr_t ) noexcept ;
(ライブラリファンダメンタルTS)
function ( std:: allocator_arg_t , const allocator_type & alloc,
std:: nullptr_t ) noexcept ;
(ライブラリファンダメンタルTS v3)
(8)
template < class Alloc >

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

const function & other ) ;
(ライブラリファンダメンタルTS)
function ( std:: allocator_arg_t , const allocator_type & alloc,
const function & other ) ;
(ライブラリファンダメンタルTS v3)
(9)
template < class Alloc >

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

function && other ) ;
(ライブラリファンダメンタルTS)
function ( std:: allocator_arg_t , const allocator_type & alloc,
function && other ) ;
(ライブラリファンダメンタルTS 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) other target * this target にコピーする。 other empty の場合、この呼び出し後 * this empty となる。
4) other target * this target にムーブする。 other empty の場合、この呼び出し後も * this empty となる。 構築後、 * this other. get_allocator ( ) のコピーを保持する。 (library fundamentals TS v3)
5) target f のコピーで初期化します。 f が関数へのヌルポインタまたはメンバーへのヌルポインタの場合、呼び出し後 * this empty 状態になります。このコンストラクタは、fが引数型 Args... と戻り値型 R に対して Callable でない限り、オーバーロード解決に参加しません。
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 のインスタンスを含む)をムーブまたはコピーする場合、そのムーブまたはコピーは アロケータ使用構築 によって行われ、アロケータは this - > get_memory_resource ( ) (ライブラリファンダメンタルTS v3まで) this - > get_allocator ( ) (ライブラリファンダメンタルTS v3以降) です。

目次

翻訳内容: - "Contents" → "目次" - "Type-erased allocator" → 翻訳せず(C++専門用語のため) - "Parameters" → "パラメータ" - "Exceptions" → "例外" - "Example" → "例" HTMLタグ、属性、数値はすべてそのまま保持し、C++専門用語は翻訳していません。

タイプ消去アロケータ

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 オブジェクトの生存期間中のみ有効
上記のいずれにも該当しない場合 プログラムは不適格(ill-formed)

パラメータ

other - *thisを初期化するために使用される関数オブジェクト
f - *thisを初期化するために使用される呼び出し可能オブジェクト
alloc - 内部メモリ割り当てに使用されるアロケータ
型要件
-
F Callable および CopyConstructible の要件を満たさなければならない。

例外

3,8) other target が関数ポインタまたは std::reference_wrapper である場合は例外を投げない。それ以外の場合は、 std::bad_alloc または格納された呼び出し可能オブジェクトのコピーコンストラクタによって投げられる例外を投げる可能性がある。
4) (なし)
5,10) f が関数ポインタまたは std::reference_wrapper である場合は例外を送出しない。それ以外の場合は、 std::bad_alloc または格納された呼び出し可能オブジェクトのコピーコンストラクタによって送出されるあらゆる例外を送出する可能性がある。
9) (なし)