3

初級模板:C++模板偏特語法

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

與模板特,是什麼應該不允許

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

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

回答

6

template<typename A, typename B> class MyClass<int, float> {...之間的差。事實上,如果你指定了形式參數AB,你的模板應該使用它們。

第二種情況只是正常的:你說你沒有「免費」參數進行專業化。

的中間情況可能是

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

這又是有效的:在這裏你只固定第二個模板參數。

部分專業化的想法如下:你使用一些形式參數製作模板,並用它們來表達對初始模板參數的約束。部分專業化的參數不需要與初始模板參數相同。例如:

template<typename X, typename Y, typename Z> class MyClass<X*, Y(Z&)> {... 

將是您的案件的有效部分專業化。這可以理解爲「對於任意類型X,YZ,如果MyClass的模板參數匹配爲和Y(Z&),則使用此特化」。編譯器應該很聰明才能匹配類型模式。

+0

from here:http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/partial_specialization.htm我得到了'template struct X {..' – uray 2010-12-15 00:22:02

+0

@uray:是的,在這種情況下,您正在使用模板參數。 – Vlad 2010-12-15 00:23:16

+0

我該如何解決第一個問題,但是爲第二個參數'template class MyClass '使用模板? – uray 2010-12-15 00:26:02