Angenommen, wir haben eine Klasse:
%Vor%Instanziieren Sie die Klasse jetzt wie folgt:
%Vor%Es ist in Ordnung, diese Klasse wird 2 überladene Funktionen mit diesen Parametern haben: (float a, int b); (float a, float b);
Aber wenn Sie die Klasse so instanziieren:
%Vor%Sie erhalten einen Kompilierungsfehler:
Mitgliedsfunktion neu deklariert.
Je nach Art des Typs möchte (oder will) ich nicht, dass der Compiler eine Funktion definiert, etwa so:
%Vor%Aber natürlich funktioniert die obige Syntax nicht. Ist es möglich, eine solche Aufgabe in C ++ auszuführen? Wenn möglich, geben Sie bitte ein Beispiel an.
Sie könnten die Vorlagenspezialisierung verwenden:
%Vor%Wenn Sie viele gemeinsame Funktionen haben, können Sie Folgendes tun:
%Vor%Verwenden Sie SFINAE:
%Vor%Ausgabe:
%Vor% Sie benötigen den C ++ 11-Modus, um den Standardvorlagenparameter in einer Funktionsvorlage zuzulassen. Und auch um enable_if
und is_same
zu erhalten, obwohl du stattdessen enable_if
von Boost bekommen könntest.
Die "Warnung!" ist, weil mit Ihrem ursprünglichen Code g.function1(1.0,1.0);
mehrdeutig war. Jetzt wird die Nicht-Template-Überladung bevorzugt. Sie können es wieder mehrdeutig machen, indem Sie
Tags und Links c++ function templates parameters