template<typename A, typename B> class MyClass<int, float> {...
sollte nicht zugelassen werden. Wenn Sie die formalen Parameter A
und B
angeben, sollte Ihre Vorlage diese verwenden.
Der zweite Fall ist einfach normal: Sie sagen, dass Sie Spezialisierung mit "freien" Parametern machen.
Ein Zwischenfall könnte
template<typename A> class MyClass<A, float> {...
sein, die wieder gültig ist: hier sind Sie nur die zweiten Template-Parameter zu fixieren.
Die Idee einer partiellen Spezialisierung ist folgende: Sie erstellen eine Vorlage mit einigen formalen Parametern und verwenden sie, um die Einschränkungen für die Parameter der ursprünglichen Vorlage auszudrücken. Die Parameter der Teilspezialisierung müssen nicht mit den ursprünglichen Vorlagenparametern identisch sein. Beispiel:
template<typename X, typename Y, typename Z> class MyClass<X*, Y(Z&)> {...
wäre eine gültige Teilspezialisierung für Ihren Fall. Dies kann wie folgt gelesen werden: "Für beliebige Typen X
, Y
und Z
, wenn die Vorlagenparameter MyClass
mit und Y(Z&)
übereinstimmen, diese Spezialisierung verwenden". Der Compiler sollte ziemlich clever sein, um dem Typmuster zu entsprechen.
von hier: http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/partial_specialization.htm Ich habe 'template Struktur X {..' –
uray
@uray: Ja, in diesem Fall verwenden Sie die Template-Parameter. – Vlad
wie repariere ich die erste, aber benutze die Vorlage für das zweite Argument 'template class MyClass '? –
uray