用于主要模板:
template<typename A, typename B> class MyClass {...
与模板专业化有什么区别
template<typename A, typename B> class MyClass<int, float> {...
和
template<> class MyClass<int, float> {...
答案 0 :(得分:6)
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
和Z
匹配,则可以将其视为“对于任意类型MyClass
,X*
和Y(Z&)
,使用这个专业“。编译器应该非常聪明才能匹配类型模式。