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

标签 c++ templates template-specialization

这发生在 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/

相关文章:

c++ - 模板中的参数值 (C++) : can be specified at runtime?

C++ 模板特化语法

c++ - 系统 ("command") 字符串中的字符串问题

php - 使用 Smarty 评论/跳过标记

C++ 可变参数模板打包到 std::array 并解包

c++ - 我如何创建一个将模板对象与其自己的模板列表相关联的方法?

C++模板解释

c++ - 如何使用模板创建带有斐波那契数的编译时模板化集/数组/vector ?

c++ - RxCpp RAII 可观察订阅

c++ - 带有大 vector 的奇怪输出