std::function<R(Args...)>::function
提供: cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
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 |
| 型の要件 | ||
-F は Callable および CopyConstructible の要件を満たさなければなりません。
| ||
-Alloc は Allocator の要件を満たさなければなりません。
| ||
例外
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 から削除されました。
例
| This section is incomplete Reason: no example |