3

für primäre Vorlage:C++ partielle Schablonen Spezialisierung Syntax

template<typename A, typename B> class MyClass {... 

mit Schablonen Spezialisierung, was der Unterschied zwischen

template<typename A, typename B> class MyClass<int, float> {... 

und

template<> class MyClass<int, float> {... 

Antwort

6

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.

+0

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

+0

@uray: Ja, in diesem Fall verwenden Sie die Template-Parameter. – Vlad

+0

wie repariere ich die erste, aber benutze die Vorlage für das zweite Argument 'template class MyClass '? – uray

Verwandte Themen