C++ C++;模板类型定义

C++ C++;模板类型定义,c++,templates,c++11,typedef,C++,Templates,C++11,Typedef,我有一节课 template<size_t N, size_t M> class Matrix { // .... }; 这会产生编译错误。以下内容创建了类似的内容,但并不完全符合我的要求: template <size_t N> class Vector: public Matrix<N,1> { }; 模板 类向量:公共矩阵 { }; 是否有解决方案或不太昂贵的解决方案/最佳实践 C++11添加了别名声明,它是typedef的泛化,允许模板:

我有一节课

template<size_t N, size_t M>
class Matrix {
    // ....
};
这会产生编译错误。以下内容创建了类似的内容,但并不完全符合我的要求:

template <size_t N>
class Vector: public Matrix<N,1>
{ };
模板
类向量:公共矩阵
{ };
是否有解决方案或不太昂贵的解决方案/最佳实践

C++11添加了别名声明,它是
typedef
的泛化,允许模板:

template <size_t N>
using Vector = Matrix<N, 1>;
模板
使用向量=矩阵;
类型
向量
相当于
矩阵


在C++03中,最接近的近似值为:

template <size_t N>
struct Vector
{
    typedef Matrix<N, 1> type;
};
模板
结构向量
{
类型定义矩阵类型;
};

这里,type
Vector::type
相当于
Matrix

哦,太好了,我还没有看到C++0x的这一部分,我已经抱怨模板化的typedef有一段时间了。。。我想我应该更彻底地阅读最终草案。继承构造函数会使OP的原始解决方案更可行吗?@StackedCrooked:取决于他的目标。当合成可以时,我避免继承(是的,继承构造函数将使这两个更容易),但当typedef可以时,我也避免合成。如果我没有错的话,使用不支持专门化,所以第二个选项在许多情况下仍然有用。@UtkarshBhardwaj注意,您可以将两者结合起来,类似于
包含别名声明的方式,例如
std::remove\u reference\t
引用
std::remove\u reference的各种专门化。
template <size_t N>
struct Vector
{
    typedef Matrix<N, 1> type;
};