Ich habe eine Klasse, um einige Eigenschaften eines Typs zu beschreiben.
%Vor% Ich möchte my_traits::some_trait
spezialisieren, aber wenn ich es versuche:
Der Compiler beschwert sich, dass my_traits::some_trait
bereits einen Initialisierer hat. Natürlich kann ich es spezialisieren, indem ich mache:
aber dann muss ich alle anderen Funktionen neu definieren, auch wenn sie genau gleich sind.
Wie kann ich my_traits<int>::some_trait
spezialisieren, ohne min
und max
?
Es gibt mehrere Möglichkeiten, dies zu tun. @Piotr Skotnicki und @Niall erwähnten das Initialisieren durch einen Helfer, der spezialisiert werden kann. Im Allgemeinen, restrukturieren Sie einfach Ihren Code, so dass Sie einige Klassen oder Funktionen spezialisieren können, und verwenden Sie dann (durch Zusammensetzung oder Vererbung) die Spezialisierungsteile nach Teilen, die Sie nicht spezialisieren müssen.
Als Beispiel für eine Alternative zu den Kommentaren gibt es hier eine spezialisierte Basis:
%Vor%Jetzt können Sie es einfach in einen gemeinsamen Teil unterteilen:
%Vor%Das Folgende zeigt, dass es verwendet wird (es gibt 0 und 1 aus)
%Vor%Tags und Links c++ c++14 template-specialization