对于主模板:
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
和 Z
,如果 MyClass
的模板参数匹配 X*
和 Y(Z&)
,则使用此特化”。编译器应该相当聪明以匹配类型模式。
template<class T, class U, int I> struct X<T*, U, I>{..}
。 - uraytemplate <typename A, typename B> class MyClass<int, B>
? - uraytemplate <typename B> class MyClass<int, B> {...
- Vlad