对于主模板:
template<typename A, typename B> class MyClass {...
与模板专业化,有什么区别
template<typename A, typename B> class MyClass<int, float> {...
和
template<> class MyClass<int, float> {...
对于主模板:
template<typename A, typename B> class MyClass {...
与模板专业化,有什么区别
template<typename A, typename B> class MyClass<int, float> {...
和
template<> class MyClass<int, float> {...
template<typename A, typename B> class MyClass<int, float> {...
不应该被允许。实际上,如果您指定了形式参数A
和B
,您的模板应该使用它们。
第二种情况很正常:你说你正在做没有“免费”参数的专业化。
中间情况可能是
template<typename A> class MyClass<A, float> {...
这又是有效的:在这里您只修复了第二个模板参数。
部分特化的思想如下:你用一些形式参数制作一个模板,并用它们来表达对初始模板参数的约束。部分特化的参数不需要与初始模板参数相同。例子:
template<typename X, typename Y, typename Z> class MyClass<X*, Y(Z&)> {...
将是您的案例的有效部分专业化。这可以理解为“对于任意类型X
, Y
and Z
,如果MyClass
的模板参数匹配X*
and Y(Z&)
,则使用此特化”。为了匹配类型模式,编译器应该非常聪明。