Sam*_*rsa 5 c++ templates typedef
在这个问题中,OP要求解决模板typedef,这在C++中是不可能的.OP也提出了一个解决方案,但不喜欢它:
template<size_t N, size_t M>
class Matrix {
// ....
};
// Problem - will not compile
typedef Matrix<N,1> Vector<N>;
// Solution
template <int N>
class Vector: public Matrix<N,1>
{ };
Run Code Online (Sandbox Code Playgroud)
我的问题是,该Helper::type 解决方案在OP的解决方案上给我们带来了什么优势(假设这些类永远不会被基指针使用或者new像这样)?一个空类在释放时应该没有开销(或者是吗?).我能看到的唯一缺点是,在调试版本中,您必须在调试时扩展基类.
编辑:除了选定的答案,请参阅@ Dani的回答谁建议继承版本需要定义构造函数,这是一个额外的不便.
重点typedef是定义类型别名.子类不是类型别名 - 它是一种新类型.
例如,想象一下库函数
template<size_t N, size_t M>
Matrix<N, M> * createMatrix();
Run Code Online (Sandbox Code Playgroud)
现在有助手类型
Vector<3>::type * var = createMatrix<3, 1>();
Run Code Online (Sandbox Code Playgroud)
是合法的.
继承
Vector<3> * var = createMatrix<3, 1>();
Run Code Online (Sandbox Code Playgroud)
不是.