C++部分模板特化语法

3

对于主模板:

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

使用模板特化时,有什么区别?

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

并且

template<> class MyClass<int, float> {...
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&)> {...

对于您的情况,这将是一个有效的偏特化。可以理解为“对于任意类型 XYZ,如果 MyClass 的模板参数匹配 X*Y(Z&),则使用此特化”。编译器应该相当聪明以匹配类型模式。


我得到了以下代码:template<class T, class U, int I> struct X<T*, U, I>{..} - uray
@uray:是的,在这种情况下,您正在使用模板参数。 - Vlad
我该如何修复第一个参数,但在第二个参数中使用模板 template <typename A, typename B> class MyClass<int, B> - uray
@uray:只需说 template <typename B> class MyClass<int, B> {... - Vlad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接