对于主模板:
template<typename A, typename B> class MyClass {...
与模板专门化有什么区别
template<typename A, typename B> class MyClass<int, float> {...
and
template<> class MyClass<int, float> {...
template<typename A, typename B> class MyClass<int, float> {...
不应该允许。事实上,如果您指定形式参数A
and B
,您的模板应该使用它们。
第二种情况很正常:你说你正在进行专业化,没有“自由”参数。
中间情况可能是
template<typename A> class MyClass<A, float> {...
这又是有效的:这里您只修复第二个模板参数。
部分特化的思想如下:创建一个带有一些形式参数的模板,并使用它们来表达对初始模板参数的约束。部分特化的参数不需要与初始模板参数相同。例子:
template<typename X, typename Y, typename Z> class MyClass<X*, Y(Z&)> {...
对于您的情况来说,这将是一个有效的部分专业化。这可以理解为“对于任意类型X
, Y
and Z
, if MyClass
的模板参数匹配X*
and Y(Z&)
,使用这个专门化”。编译器应该非常聪明才能匹配类型模式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)