std::experimental::ranges:: Invocable, std::experimental::ranges:: RegularInvocable
|
Definiert in Header
<experimental/ranges/concepts>
|
||
|
template
<
class
F,
class
...
Args
>
concept
bool
Invocable
=
|
(ranges TS) | |
|
template
<
class
F,
class
...
Args
>
concept bool RegularInvocable = Invocable < F, Args... > ; |
(ranges TS) | |
Das
Invocable
-Konzept spezifiziert, dass ein aufrufbarer Typ
F
mit einer Menge von Argumenttypen
Args...
unter Verwendung der Funktionsvorlage
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 verändert.
Gleichheitserhaltung
Ein Ausdruck ist equality preserving , wenn er bei gleichen Eingaben gleiche Ausgaben liefert.
- Die Eingaben eines Ausdrucks bestehen aus seinen Operanden.
- Die Ausgaben eines Ausdrucks bestehen aus seinem Ergebnis und allen durch den Ausdruck modifizierten Operanden (falls vorhanden).
Jeder Ausdruck, der gleichungserhaltend sein muss, muss darüber hinaus stabil sein: Zwei Auswertungen eines solchen Ausdrucks mit denselben Eingabeobjekten müssen gleiche Ausgaben liefern, sofern keine explizite Änderung dieser Eingabeobjekte zwischen den Auswertungen erfolgt.
Sofern nicht anders angegeben, muss jeder Ausdruck, der in einem requires-expression verwendet wird, 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.
Hinweise
Der Unterschied zwischen
Invocable
und
RegularInvocable
ist rein semantisch.
Ein Zufallszahlengenerator kann
Invocable
erfüllen, aber nicht
RegularInvocable
(
komische
ausgenommen
).