C ++部分模板特化语法

时间:2010-12-15 00:16:33

标签: c++ templates metaprogramming specialization partial-specialization

用于主要模板:

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

与模板专业化有什么区别

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

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

1 个答案:

答案 0 :(得分: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的模板参数与YZ匹配,则可以将其视为“对于任意类型MyClassX*Y(Z&),使用这个专业“。编译器应该非常聪明才能匹配类型模式。