Ich habe ein kurzes Beispiel für die Verwirrung geschrieben, die ich hier habe:
%Vor%Die Ausgabe davon ist:
%Vor% Also denke ich, okay, die expliziteste Spezialisierung bekommt Priorität.
Aber dann entferne ich:
Und die Ausgabe ist:
%Vor% Warum wird template <int>
version nicht aufgerufen?
Was würde dazu führen, dass er angerufen wird?
Warum ist der Zweck dieser Syntax?
Die zweite Überladung erwartet eine ganze Zahl, keinen Typ. Du würdest es mit
nennen %Vor% Zur Klarstellung: Die zweite ist eine unabhängige überladene Funktion namens Add
, keine Spezialisierung. Sie dachten wahrscheinlich an etwas wie:
Das ist genau das gleiche wie die letzte Spezialisierung, die Sie geschrieben haben und die damit in Konflikt stünde (Neudefinition). Live-Beispiel
Sie verwenden die falsche Syntax für die Spezialisierung für int
s. Es sollte sein:
Und wenn Sie das tun, werden Sie feststellen, dass es aufgrund mehrerer Definitionen mit der endgültigen Spezialisierung kollidiert.