Namespaces
Variants

std::function_ref::function_ref

Von de.cppreference.net
 
 
Dienstprogrammbibliothek
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Koroutinen-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Allgemeine Dienstprogramme
Relationale Operatoren (veraltet in C++20)
Ganzzahl-Vergleichsfunktionen
(C++20)(C++20)(C++20)    
(C++20)
Tausch und Typ-Operationen
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Allgemeine Vokabular-Typen
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
Funktionsobjekte
Funktionsaufruf
(C++17)(C++23)
Identitäts-Funktionsobjekt
(C++20)
Transparente Operator-Wrapper
(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)

Alte Binder und Adaptoren
(bis C++17*)
(bis C++17*)
(bis C++17*)
(bis C++17*)
(bis C++17*)(bis C++17*)(bis C++17*)(bis C++17*)
(bis C++20*)
(bis C++20*)
(bis C++17*)(bis C++17*)
(bis C++17*)(bis C++17*)

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

Erstellt eine neue std::function_ref.

1) Initialisiert bound-entity mit f, und thunk-ptr mit der Adresse einer Funktion thunk. Das Verhalten ist undefiniert, wenn f ein Nullzeiger ist.
  • Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn sowohl std::is_function_v<F> als auch /*is-invocable-using*/<F> true sind.
2) Initialisiert bound-entity mit std::addressof(f), und thunk-ptr mit der Adresse einer Funktion thunk.
  • Sei T gleich std::remove_reference_t<F>. Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn :
    • std::remove_cvref_t<F> nicht derselbe Typ wie function_ref ist,
    • std::is_member_pointer_v<T>false ist, und
    • /*is-invocable-using*/</*cv*/ T&>true ist.
3) Initialisiert bound-entity mit einem Zeiger auf ein nicht spezifiziertes Objekt oder einem Nullzeigerwert, und thunk-ptr mit der Adresse einer Funktion thunk.
  • Sei F gleich decltype(f). Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn /*is-invocable-using*/<F>true ist.
  • Das Programm ist fehlerhaft, wenn f != nullptrfalse ist, wenn std::is_pointer_v<F> || std::is_member_pointer_v<F>true ist.
4) Initialisiert bound-entity mit std::addressof(obj), und thunk-ptr mit der Adresse einer Funktion thunk.
  • Sei T gleich std::remove_reference_t<U> und F gleich decltype(f). Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn :
    • std::is_rvalue_reference_v<U&&>false ist, und
    • /*is-invocable-using*/<F, /*cv*/ T&>true ist.
  • Das Programm ist fehlerhaft, wenn f != nullptrfalse ist, wenn std::is_pointer_v<F> || std::is_member_pointer_v<F>true ist.
5) Initialisiert bound-entity mit obj, und thunk-ptr mit der Adresse einer Funktion thunk. Das Verhalten ist undefiniert, wenn obj ein Nullzeiger ist, wenn std::is_member_pointer_v<F>true ist.
  • Sei F gleich decltype(f). Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn /*is-invocable-using*/<F, /*cv*/ T*>true ist.
  • Das Programm ist fehlerhaft, wenn f != nullptrfalse ist, wenn std::is_pointer_v<F> || std::is_member_pointer_v<F>true ist.
6) Standardmäßiger Kopierkonstruktor kopiert die bound-entity und thunk-ptr von other.

Die Adresse einer Funktion thunk wird verwendet, um thunk-ptr so zu initialisieren, dass ein Aufruf von thunk(bound-entity, call-args...)ausdrucksäquivalent ist zu:

Überladungen Ausdrucksäquivalenz
(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 ist genau dann, wenn:

  • std::is_nothrow_invocable_r_v<R, T..., Args...>true ist, wenn noextrue ist, oder
  • std::is_invocable_r_v<R, T..., Args...>true
ist

Parameter

other - eine andere function_ref zum Kopieren
f - eine Funktion oder ein Callable Objekt zum Einkapseln
obj - ein Objekt oder Zeiger zum Binden

Beispiel

Siehe auch

Konstruiert ein neues std::move_only_function Objekt
(öffentliche Elementfunktion von std::move_only_function )