Wie spezialisiere ich die variadische Template-Funktion, die const als Referenz für ein Argument hat?
Beispiel:
%Vor% Beim Aufruf der Funktion foo mit dem deklarierten const Test&
-Argument sieht der Compiler keine spezielle Funktion und keine Rückfälle für die gelöschte Funktion:
Der obige Code wird korrekt kompiliert, wenn ich den const-Verweis vom Argument entferne. Was mache ich falsch?
Der Code kann hier
gefunden werden Der automatische Vorlagenabzug ist nicht schlau genug, um zu vermuten, dass der letzte Vorlagenparameter auf const Test&
anstelle von Test
gesetzt werden soll. Genauere Typableitung entfernen immer CV-Qualifier von einem Typ.
Sie haben eine neue explizite Template Instanziierung hier:
%Vor% Dies liegt daran, dass die Vorlagenargumente, die die primäre Vorlage für Ihren Aufruf ableitet, int
, const char*
und Test
, nicht const Test&
sind. Das bedeutet, dass Ihre Spezialisierung nicht verwendet wird, weil die Vorlagenargumente nicht mit den Parametern übereinstimmen.
Ihre einfachste Option ist die Bereitstellung einer separaten Überladung anstelle einer Spezialisierung:
%Vor%Tags und Links c++ variadic-templates template-specialization const-reference