Namespaces
Variants

std::function_ref::function_ref

От ru.cppreference.net
 
 
Библиотека утилит
Поддержка языка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования возможностей библиотеки (C++20)
Утилиты программ
Функции с переменным числом аргументов
Поддержка корутин (C++20)
Поддержка контрактов (C++26)
Трёхстороннее сравнение
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Общие утилиты
Операторы отношений (устарело в C++20)
 
Функциональные объекты
Вызов функции
(C++17)(C++23)
Тождественный функциональный объект
(C++20)
Старые связыватели и адаптеры
(до 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*)
 
 
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 )