Namensräume
Varianten
Aktionen

std::invocable, std::regular_invocable

Von cppreference.com
< cpp‎ | concepts
 
 
 
Definiert in der Header-Datei <concepts>
template< class F, class... Args >

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

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

Das Konzept invocable spezifiziert, dass ein aufrufbarer Typ F mit einer Menge von Argumenten Args... mithilfe der Funktions-Template std::invoke aufgerufen werden kann.

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

Inhalt

[bearbeiten] Gleichheitserhaltung

Ausdrücke, die in requires-Ausdrücken der Standardbibliothekskonzepte deklariert sind, müssen gleichheitserhaltend sein (sofern nicht anders angegeben).

[bearbeiten] Anmerkungen

Die Unterscheidung zwischen invocable und regular_invocable ist rein semantischer Natur.

Ein Zufallszahlengenerator kann invocable erfüllen, aber nicht regular_invocable (komische Ausnahmen unberücksichtigt).

[bearbeiten] 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]

[bearbeiten] Siehe auch

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

[bearbeiten] Externe Links

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