这发生在 Template specialization or conditional expressions? 之后的思路中.
我在我的一个项目中使用模板特化,并从 Stroustrup 看到了这个例子:Matrix.h ,他在这里声明了一个 MatrixBase 模板类
template<class T> class Matrix_base
用于公共(public)元素和 Matrix 模板类
template<class T = double, int D = 1> class Matrix
作为特化的“ Prop ”(不管是什么)。他将构造函数声明为私有(private)的,以便只能实例化特化。这些声明:
template<class T> class Matrix<T,1> : public Matrix_base<T> {...};
template<class T> class Matrix<T,2> : public Matrix_base<T> {...};
template<class T> class Matrix<T,3> : public Matrix_base<T> {...};
我的问题是:在这种情况下,特化的优势是什么?显然这三个专业没有共同的代码,那为什么不把通用的模板剪下来声明:
template<class T> class Matrix_1<T> : public Matrix_base<T> {...};
template<class T> class Matrix_2<T> : public Matrix_base<T> {...};
template<class T> class Matrix_3<T> : public Matrix_base<T> {...};
?
最佳答案
因为有了第二个模板参数,就可以以及一个通用的、非专门的实现。所以
Matrix<float, 1000> m;
可能会做一些合理但不专业的事情,而你必须定义一个 Matrix_1000<T>
.罢工>
编辑:第一点一般适用,但不适用于这种特殊情况,一般情况下有一个私有(private)构造函数。
此外,它还允许你做类似的事情
Matrix<double, SOME_CONSTANT> m;
这是你不能用你的 _N
做的解决方案。
关于c++ - 为什么要使用专门的模板类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11328795/