为什么要使用专门的模板类?

ste*_*fen 2 c++ templates template-specialization

这发生在模板专业化或条件表达式之后的思路中.

我在我的一个项目中使用模板特化,并从Stroustrup:Matrix.h中看到了这个例子,他声明了一个MatrixBase模板类

template<class T> class Matrix_base
Run Code Online (Sandbox Code Playgroud)

用于公共元素和Matrix模板类

template<class T = double, int D = 1> class Matrix
Run Code Online (Sandbox Code Playgroud)

作为专业化的"道具"(无论是什么).他将构造函数声明为私有,以便只能实现特化.宣布这些:

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> {...};
Run Code Online (Sandbox Code Playgroud)

我的问题是:在这种情况下,专业化的优势是什么?显然,这三个专业没有共同的代码,为什么不切出一般模板并声明:

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> {...};
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 5

因为通过具有第二个模板参数,一个允许特化以及一般的非专用实现.所以

Matrix<float, 1000> m;
Run Code Online (Sandbox Code Playgroud)

可能做一些合理但非专业的事情,而你必须定义一个Matrix_1000<T>. 编辑:第一点一般适用,但不适用于这种特殊情况,其中一般情况下有一个私有构造函数.

此外,它允许你做的事情

Matrix<double, SOME_CONSTANT> m;
Run Code Online (Sandbox Code Playgroud)

_N无法解决这个问题.