ura*_*ray 3 c++ templates metaprogramming partial-specialization specialization
对于主要模板:
template<typename A, typename B> class MyClass {...
Run Code Online (Sandbox Code Playgroud)
与模板专业化,有什么区别
template<typename A, typename B> class MyClass<int, float> {...
Run Code Online (Sandbox Code Playgroud)
和
template<> class MyClass<int, float> {...
Run Code Online (Sandbox Code Playgroud)
template<typename A, typename B> class MyClass<int, float> {...不应该被允许.事实上,如果指定的形参A和B,你的模板应使用它们.
第二种情况是正常的:你说你没有"免费"参数进行专业化.
一个中间案例可能是
template<typename A> class MyClass<A, float> {...
Run Code Online (Sandbox Code Playgroud)
这又是有效的:这里你只修复第二个模板参数.
部分特化的想法如下:使用一些形式参数创建模板,并使用它们来表达对初始模板参数的约束.部分特化的参数不需要与初始模板参数相同.例:
template<typename X, typename Y, typename Z> class MyClass<X*, Y(Z&)> {...
Run Code Online (Sandbox Code Playgroud)
对你的案子来说是一个有效的部分专业化.这可以理解为"为任意类型X,Y并且Z,如果MyClass的模板参数匹配X*和Y(Z&)使用这种专业化".编译器应该非常聪明才能匹配类型模式.
| 归档时间: |
|
| 查看次数: |
1355 次 |
| 最近记录: |