3

对于主模板:

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

与模板专业化,有什么区别

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

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

1 回答 1

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, Yand Z,如果MyClass的模板参数匹配X*and Y(Z&),则使用此特化”。为了匹配类型模式,编译器应该非常聪明。

于 2010-12-15T00:19:40.133 回答