名前空間
変種
操作

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

提供: cppreference.com
< cpp‎ | utility‎ | functional‎ | function
 
 
 
関数オブジェクト
関数ラッパー
(C++11)
(C++11)
関数の部分適用
(C++20)
(C++11)
関数呼び出し
(C++17)
恒等関数オブジェクト
(C++20)
参照ラッパー
(C++11)(C++11)
演算子ラッパー
否定子
(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) otherターゲット*thisターゲットにコピー (3) またはムーブ (4) します。 otherの場合、 *thisになります。 (4) の場合、呼び出し後に other は有効だけれども未規定な状態になります。
5) std::move(f)ターゲットを初期化します。 f が関数を指すヌルポインタまたはメンバを指すヌルポインタの場合、 *this は空になります。 このコンストラクタは、 f が引数型 Args... および戻り値型 R に対して Callable でなければ、オーバーロード解決に参加しません。 (C++14以上)
6-10) (1-5) と同様ですが、 function が使用するかもしれないあらゆる内部データ構造のためのメモリ確保に alloc が使用されます。

ターゲットが関数ポインタまたは std::reference_wrapper の場合、 small object optimization が保証されます。 つまり、これらのターゲットは必ず std::function オブジェクトの内部に直接格納され、動的確保は行われません。 それ以外の大きなオブジェクトは、動的確保された記憶域内に構築され、ポインタを通してアクセスされる場合があります。

目次

[編集] 引数

other - *this を初期化するために使用する関数オブジェクト
f - *this を初期化するために使用する callable
alloc - 内部のメモリ確保のために使用する Allocator
型の要件
-
FCallable および CopyConstructible の要件を満たさなければなりません。
-
AllocAllocator の要件を満たさなければなりません。

[編集] 例外

3,8,9) otherターゲットが関数ポインタまたは std::reference_wrapper の場合は、例外を投げません。 そうでなければ、 std::bad_alloc または、格納されている callable オブジェクトをコピーまたはムーブするために使用されるコンストラクタによって、任意の例外が投げられる可能性があります。
4) otherターゲットが関数ポインタまたは std::reference_wrapper の場合は、例外を投げません。 そうでなければ、 std::bad_alloc または、格納されている callable オブジェクトをコピーまたはムーブするために使用されるコンストラクタによって、任意の例外が投げられる可能性があります。
(C++20未満)
5,10) f が関数ポインタまたは std::reference_wrapper の場合は、例外を投げません。 そうでなければ、 std::bad_alloc または、格納されている callable オブジェクトのコピーコンストラクタによって、任意の例外が投げられる可能性があります。

[編集] ノート

std::function のアロケータのサポートは、貧弱に規定され、一貫性なく実装されていました。 処理系によってはオーバーロード (6-10) がまったく提供されず、処理系によってはオーバーロードは提供されるけれども指定されたアロケータ引数は無視され、処理系によってはオーバーロードが提供され構築時には指定されたアロケータが使用されるけれども代入時には使用されません。 その結果、アロケータのサポートは C++17 から削除されました。

[編集]