Namensräume
Varianten
Aktionen

std::experimental::ranges::Invocable, std::experimental::ranges::RegularInvocable

Von cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
 
 
Konzeptbibliothek
Kernsprachen-Konzepte
                              
Objektkonzepte
                              
                              
Vergleichskonzepte
Aufrufbare Konzepte
InvocableRegularInvocable
                                        
                              
URNG-Konzept
 
Definiert in Header <experimental/ranges/concepts>
template< class F, class... Args >

concept bool Invocable =
    requires(F&& f, Args&&... args) {
        ranges::invoke(std::forward<F>(f), std::forward<Args>(args)...);
            /* muss nicht gleichheitserhaltend sein */

    };
(Ranges TS)
template< class F, class... Args >
concept bool RegularInvocable = Invocable<F, Args...>;
(Ranges TS)

Das Invocable-Konzept spezifiziert, dass ein aufrufbaren Typ F mit einem Satz von Argumenttypen Args... unter Verwendung der Funktion-Template ranges::invoke aufgerufen werden kann.

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

[bearbeiten] Gleichheitserhaltung

Ein Ausdruck ist gleichheitserhaltend, wenn er bei gleichen Eingaben gleiche Ausgaben liefert.

  • Die Eingaben für einen Ausdruck bestehen aus seinen Operanden.
  • Die Ausgaben eines Ausdrucks bestehen aus seinem Ergebnis und allen von dem Ausdruck modifizierten Operanden (falls vorhanden).

Jeder Ausdruck, der gleichheitserhaltend sein muss, muss außerdem stabil sein: Zwei Auswertungen eines solchen Ausdrucks mit denselben Eingabeobjekten müssen gleiche Ausgaben liefern, solange keine explizite zwischenzeitliche Modifikation dieser Eingabeobjekte erfolgt.

Sofern nicht anders angegeben, muss jeder in einem requires-expression verwendete Ausdruck gleichheitserhaltend und stabil sein, und die Auswertung des Ausdrucks darf nur seine nicht-konstanten Operanden modifizieren. Operanden, die konstant sind, dürfen nicht modifiziert werden.

[bearbeiten] Hinweise

Die Unterscheidung zwischen Invocable und RegularInvocable ist rein semantisch.

Ein Zufallszahlengenerator kann Invocable erfüllen, aber nicht RegularInvocable (komische gilt nicht für die hier genannten Ausnahmen).