Parameterpaket aware std :: is_base_of ()

8

Gibt es eine Möglichkeit, eine statische Assertion zu haben, ob ein Typ, der als Template-Argument zur Verfügung gestellt wird, alle Typen implementiert, die im Parameterpack aufgelistet sind, dh. ein Parameterpack aware std :: is_base_of ()?

%Vor%     
T. Carter 26.11.2012, 10:24
quelle

2 Antworten

14

Update für C ++ 17: Mit den Falteausdrücken von C ++ 17 wird dies fast trivial:

%Vor%

Ursprüngliche Antwort (C ++ 11/14): Sie könnten die Pack-Erweiterung und eine statische Version von std::all_of verwenden:

%Vor%

Die Paketerweiterung wird auf die Liste der Werte erweitert, indem Sie jeden Typ in Requirements... für das Fragezeichen in std::is_base_of<Type, ?>::value einfügen, dh für die erste Zeile in main wird sie für den zweiten in static_all_of<true, true> erweitert Zeile wird es static_all_of<true, false, true>

sein     
Arne Mertz 26.11.2012, 10:57
quelle
3

Nur für zukünftige Referenz, weil ich gerade dieses Problem hatte, können Sie jetzt mit C ++ 17 falte Ausdrücke wie folgt verwenden:

%Vor%     
Peter Goldsborough 24.03.2016 06:33
quelle