std::function_ref::function_ref
ja.cppreference.net より
template< class F >
function_ref( F* f ) noexcept;
|
(1) | (C++26 から) |
template< class F >
function_ref( F&& f ) noexcept;
|
(2) | (C++26 から) |
template< auto f >
function_ref( std::nontype_t<f> ) noexcept;
|
(3) | (C++26 から) |
template< auto f, class U >
function_ref( std::nontype_t<f>, U&& obj ) noexcept;
|
(4) | (C++26 から) |
template< auto f, class T >
function_ref( std::nontype_t<f>, /*cv*/ T* obj ) noexcept;
|
(5) | (C++26 から) |
function_ref( const function_ref& other ) = default;
|
(6) | (C++26 から) |
新しい std::function_ref を構築する。
1)
bound-entity を f で初期化し、thunk-ptr を関数 thunk のアドレスで初期化する。f がヌルポインタの場合、動作は未定義である。
- このオーバーロードは、
std::is_function_v<F>と/*is-invocable-using*/<F>の両方がtrueである場合にのみオーバーロード解決に参加する。
2)
bound-entity を std::addressof(f) で初期化し、thunk-ptr を関数 thunk のアドレスで初期化する。
Tをstd::remove_reference_t<F>とする。このオーバーロードは、以下の場合にのみオーバーロード解決に参加する :std::remove_cvref_t<F>がfunction_refと同じ型でなく、std::is_member_pointer_v<T>がfalseであり、かつ/*is-invocable-using*/</*cv*/ T&>がtrueであること。
3)
bound-entity を未指定のオブジェクトへのポインタまたはヌルポインタ値で初期化し、thunk-ptr を関数 thunk のアドレスで初期化する。
Fをdecltype(f)とする。このオーバーロードは、/*is-invocable-using*/<F>がtrueである場合にのみオーバーロード解決に参加する。f != nullptrがfalseであり、かつstd::is_pointer_v<F> || std::is_member_pointer_v<F>がtrueである場合、プログラムは ill-formed である。
4)
bound-entity を std::addressof(obj) で初期化し、thunk-ptr を関数 thunk のアドレスで初期化する。
Tをstd::remove_reference_t<U>とし、Fをdecltype(f)とする。このオーバーロードは、以下の場合にのみオーバーロード解決に参加する :std::is_rvalue_reference_v<U&&>がfalseであり、かつ/*is-invocable-using*/<F, /*cv*/ T&>がtrueであること。
f != nullptrがfalseであり、かつstd::is_pointer_v<F> || std::is_member_pointer_v<F>がtrueである場合、プログラムは ill-formed である。
5)
bound-entity を obj で初期化し、thunk-ptr を関数 thunk のアドレスで初期化する。obj がヌルポインタであり、かつ std::is_member_pointer_v<F> が true である場合、動作は未定義である。
Fをdecltype(f)とする。このオーバーロードは、/*is-invocable-using*/<F, /*cv*/ T*>がtrueである場合にのみオーバーロード解決に参加する。f != nullptrがfalseであり、かつstd::is_pointer_v<F> || std::is_member_pointer_v<F>がtrueである場合、プログラムは ill-formed である。
6) デフォルト化されたコピーコンストラクタは、
bound-entity と thunk-ptr を other からコピーする。関数 thunk のアドレスは、thunk-ptr を初期化するために使用され、thunk(bound-entity, call-args...) の呼び出しが以下と式等価になるようにする:
| オーバーロード | 式等価 |
|---|---|
| (1,3) | std::invoke_r<R>(f, call-args...)
|
| (2) | std::invoke_r<R>(static_cast<cvT&>(f), call-args...)
|
| (4) | std::invoke_r<R>(f, static_cast<cvT&>(obj), call-args...)
|
| (5) | std::invoke_r<R>(f, obj, call-args...)
|
/*is-invocable-using*/<T...> は、以下の場合に限り true である:
std::is_nothrow_invocable_r_v<R, T..., Args...>は、trueもし noex がtrueである場合、またはstd::is_invocable_r_v<R, T..., Args...>はtrue
パラメータ
| other | - |
コピー元の別の
function_ref
|
| f | - | ラップする関数または Callable オブジェクト |
| obj | - | バインドするオブジェクトまたはポインタ |
例
|
このセクションは不完全です
理由: 例がありません |
関連項目
|
std::move_only_functionオブジェクトを構築する
(std::move_only_functionの公開メンバ関数) |