Namespaces
Variants

std:: invocable, std:: regular_invocable

From cppreference.net
Definiert im Header <concepts>
template < class F, class ... Args >

concept invocable =
requires ( F && f, Args && ... args ) {
std:: invoke ( std:: forward < F > ( f ) , std:: forward < Args > ( args ) ... ) ;
/* nicht erforderlich gleichheitserhaltend zu sein */

} ;
(seit C++20)
template < class F, class ... Args >
concept regular_invocable = std :: invocable < F, Args... > ;
(seit C++20)

Das invocable Konzept spezifiziert, dass ein aufrufbarer Typ F mit einer Menge von Argumenten Args... unter Verwendung der Funktionsvorlage std::invoke aufgerufen werden kann.

Das regular_invocable Konzept erweitert das invocable Konzept, indem es verlangt, dass der invoke Ausdruck gleichheitserhaltend ist und weder das Funktionsobjekt noch die Argumente verändert.

Inhaltsverzeichnis

Gleichheitserhaltung

Ausdrücke, die in requires expressions der Standardbibliothek-Konzepte deklariert werden, müssen equality-preserving sein (sofern nicht anders angegeben).

Hinweise

Der Unterschied zwischen invocable und regular_invocable ist rein semantisch.

Ein Zufallszahlengenerator kann invocable erfüllen, aber nicht regular_invocable ( komische ausgenommen ).

Referenzen

  • C++23-Standard (ISO/IEC 14882:2024):
  • 18.7.2 Konzept invocable [concept.invocable]
  • 18.7.3 Konzept regular_invocable [concept.regularinvocable]
  • C++20-Standard (ISO/IEC 14882:2020):
  • 18.7.2 Konzept invocable [concept.invocable]
  • 18.7.3 Konzept regular_invocable [concept.regularinvocable]

Siehe auch

prüft, ob ein Typ mit den gegebenen Argumenttypen aufgerufen werden kann (als ob durch std::invoke )
(Klassentemplate)

Externe Links

Ein scherzhaftes Beispiel eines Zufallszahlengenerators, der sowohl invocable als auch regular_invocable erfüllt.