Werden C ++ 17 Template-Argumente mit Auto-Feature eingeschränkte std :: function-Objekte erlauben?

8

Mit der kommenden C ++ 17-Funktion von Nicht-Typ-Vorlage Argumente mit Auto , wird es möglich sein, std::function so zu implementieren, dass man zB folgende Funktionen einsetzen kann:

%Vor%

in automatisch gesteuerte std::function -Objekte:

%Vor%

Und so weiter.

Mit anderen Worten: std::function Objekte sind auf die Funktionstypen beschränkt, die sie akzeptieren ?

(Derzeit erhalten wir bei GCC error: 'auto' parameter not permitted in this context .)

    
Davit Tevanian 27.09.2016, 14:19
quelle

1 Antwort

7

Das sind keine nicht-type Template-Argumente, daher ist auto dort in C ++ 17 nicht erlaubt.

Nicht typisierte Vorlagenargumente sind Argumente für Vorlagen, die Zeiger oder Ganzzahlen oder ähnliche, tatsächliche Werte sind, keine Typen.

Zum Beispiel

%Vor%

Hier ist 7 ein nicht typisiertes Vorlagenargument vom Typ std::size_t und Wert 7 .

Die nicht typisierte Vorlage auto erlaubt etwas wie:

%Vor%

jetzt integral<7> ist std::integral_constant<int, 7> .

Andererseits ist Ihre Verwendung von auto anstelle eines Typs , kein Nicht-Typ.

Es gibt eine Funktion, von der der Typ der Vorlage abgeleitet wird. Sie könnten also schreiben:

%Vor%

, wenn sie std::function erweitert haben, um eine Signatur von einem Funktionszeiger (oder Nicht-Template-Callable) ableiten zu können.

Beachten Sie jedoch, dass diese std::function eine feste Signatur und keine Vorlage hätte. Das Feature erlaubt einfach Deduktion , nicht Vorlage dynamischen Versand.

Ich weiß nicht, ob std::function auf diese Weise in C ++ 17 erweitert wurde, aber die Sprachfunktion wurde hinzugefügt.

    
Yakk 27.09.2016, 14:28
quelle