Variadic Vorlagen und std :: bind

8

Wie kann ich die folgende Template-Funktion ändern, um variantenbasierte Vorlagen zu nutzen? Das heißt, std :: bind Platzhalter durch einen variadischen Parameter anstelle von P1 und P2 zu ersetzen? Im Moment habe ich eine dieser Funktionen pro Arity, wobei die Arity Null keinen P-Parameter hat, bis Arity 9 P1- bis P9-Parameter hat. Ich hatte gehofft, wenn möglich, dies in eine einzige Funktion zu zerlegen.

%Vor%     
Robinson 17.01.2014, 17:56
quelle

1 Antwort

17

Sie können std::is_placeholder für Spezialisierungen einer benutzerdefinierten Vorlage (teilweise) spezialisieren. Auf diese Weise können Sie einen Platzhaltergenerator über die übliche int_sequence -Technik einfügen.

Aus [func.bind.isplace] / 2

  

Die Implementierung muss eine Definition mit dem BaseCharacteristic von integral_constant<int, J> enthalten   wenn T der Typ von std::placeholders::_J ist, andernfalls muss ein BaseCharacteristic von integral_constant<int, 0> vorhanden sein. Ein Programm kann diese Vorlage für einen benutzerdefinierten Typ T spezialisieren, um eine BaseCharacteristic von integral_constant<int, N> mit N > 0 zu haben, um anzuzeigen, dass T als Platzhaltertyp behandelt werden sollte.

Die übliche int_sequence :

%Vor%

Die benutzerdefinierte Platzhaltervorlage und Spezialisierung von is_placeholder :

%Vor%

Ich bin mir nicht sicher, wo ich das 1 einführen soll; Die Orte, die ich in Betracht gezogen habe, sind alles andere als optimal.

Verwenden Sie es, um etwas Bindemittel zu schreiben:

%Vor%

Anwendungsbeispiel des Ordners:

%Vor%     
dyp 17.01.2014, 18:35
quelle

Tags und Links