Namespaces
Variants

std::function_ref::function_ref

Depuis fr.cppreference.net
 
 
Bibliothèque d'utilitaires
Support linguistique
Support des types (types de base, RTTI)
Macros de test de fonctionnalités de la bibliothèque (C++20)
Utilitaires de programme
Fonctions variadiques
Support des coroutines (C++20)
Support des contrats (C++26)
Comparaison à trois voies
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilitaires généraux
Opérateurs relationnels (déprécié en C++20)
 
Objets fonction
Invocation de fonction
(C++17)(C++23)
Objet fonction identité
(C++20)
Wrapper d'opérateurs transparents
(C++14)
(C++14)
(C++14)
(C++14)  
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)

Anciens binders et adaptateurs
(jusqu'à C++17*)
(jusqu'à C++17*)
(jusqu'à C++17*)
(jusqu'à C++17*)
(jusqu'à C++17*)  
(jusqu'à C++17*)
(jusqu'à C++17*)(jusqu'à C++17*)(jusqu'à C++17*)(jusqu'à C++17*)
(jusqu'à C++20*)
(jusqu'à C++20*)
(jusqu'à C++17*)(jusqu'à C++17*)
(jusqu'à C++17*)(jusqu'à C++17*)

(jusqu'à C++17*)
(jusqu'à C++17*)(jusqu'à C++17*)(jusqu'à C++17*)(jusqu'à C++17*)
(jusqu'à C++20*)
(jusqu'à C++20*)
 
 
template< class F >
function_ref( F* f ) noexcept;
(1) (depuis C++26)
template< class F >
function_ref( F&& f ) noexcept;
(2) (depuis C++26)
template< auto f >
function_ref( std::nontype_t<f> ) noexcept;
(3) (depuis C++26)
template< auto f, class U >
function_ref( std::nontype_t<f>, U&& obj ) noexcept;
(4) (depuis C++26)
template< auto f, class T >
function_ref( std::nontype_t<f>, /*cv*/ T* obj ) noexcept;
(5) (depuis C++26)
function_ref( const function_ref& other ) = default;
(6) (depuis C++26)

Crée un nouveau std::function_ref.

1) Initialise bound-entity avec f, et thunk-ptr avec l'adresse d'une fonction thunk. Le comportement est indéfini si f est un pointeur nul.
  • Cette surcharge participe à la résolution de surcharge seulement si std::is_function_v<F> et /*is-invocable-using*/<F> sont true.
2) Initialise bound-entity avec std::addressof(f), et thunk-ptr avec l'adresse d'une fonction thunk.
  • Soit T = std::remove_reference_t<F>. Cette surcharge participe à la résolution de surcharge seulement si :
    • std::remove_cvref_t<F> n'est pas le même type que function_ref,
    • std::is_member_pointer_v<T> est false, et
    • /*is-invocable-using*/</*cv*/ T&> est true.
3) Initialise bound-entity avec un pointeur vers un objet non spécifié ou une valeur de pointeur nul, et thunk-ptr avec l'adresse d'une fonction thunk.
  • Soit F = decltype(f). Cette surcharge participe à la résolution de surcharge seulement si /*is-invocable-using*/<F> est true.
  • Le programme est mal formé si f != nullptr est false alors que std::is_pointer_v<F> || std::is_member_pointer_v<F> est true.
4) Initialise bound-entity avec std::addressof(obj), et thunk-ptr avec l'adresse d'une fonction thunk.
  • Soit T = std::remove_reference_t<U> et F = decltype(f). Cette surcharge participe à la résolution de surcharge seulement si :
    • std::is_rvalue_reference_v<U&&> est false, et
    • /*is-invocable-using*/<F, /*cv*/ T&> est true.
  • Le programme est mal formé si f != nullptr est false alors que std::is_pointer_v<F> || std::is_member_pointer_v<F> est true.
5) Initialise bound-entity avec obj, et thunk-ptr avec l'adresse d'une fonction thunk. Le comportement est indéfini si obj est un pointeur nul alors que std::is_member_pointer_v<F> est true.
  • Soit F = decltype(f). Cette surcharge participe à la résolution de surcharge seulement si /*is-invocable-using*/<F, /*cv*/ T*> est true.
  • Le programme est mal formé si f != nullptr est false alors que std::is_pointer_v<F> || std::is_member_pointer_v<F> est true.
6) Constructeur de copie par défaut copie bound-entity et thunk-ptr de other.

L'adresse d'une fonction thunk est utilisée pour initialiser thunk-ptr de sorte qu'un appel à thunk(bound-entity, call-args...) soit équivalent à l'expression :

Surcharges Équivalence à l'expression
(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...> est true si et seulement si :

  • std::is_nothrow_invocable_r_v<R, T..., Args...> est true si noex est true, ou
  • std::is_invocable_r_v<R, T..., Args...> est true

Paramètres

other - autre function_ref à copier
f - une fonction ou un Callable à encapsuler
obj - un objet ou pointeur à lier

Exemple

Voir aussi

construit un nouvel objet std::move_only_function
(fonction membre publique de std::move_only_function )