std::function_ref::function_ref
От ru.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.
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.
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.
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
)
|