C++模板typedef

Not*_*ist 356 c++ templates typedef c++11

我上课了

template<size_t N, size_t M>
class Matrix {
    // ....
};
Run Code Online (Sandbox Code Playgroud)

我想typedef创建一个Vector(列向量),它相当于一个Matrix大小为N和1的东西.这样的东西:

typedef Matrix<N,1> Vector<N>;
Run Code Online (Sandbox Code Playgroud)

这会产生编译错误.以下内容创建了类似的内容,但并不完全符合我的要求:

template <size_t N>
class Vector: public Matrix<N,1>
{ };
Run Code Online (Sandbox Code Playgroud)

是否有解决方案或不太昂贵的解决方法/最佳实践?

GMa*_*ckG 532

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

template <size_t N>
using Vector = Matrix<N, 1>;
Run Code Online (Sandbox Code Playgroud)

类型Vector<3>相当于Matrix<3, 1>.


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

template <size_t N>
struct Vector
{
    typedef Matrix<N, 1> type;
};
Run Code Online (Sandbox Code Playgroud)

这里,类型Vector<3>::type相当于Matrix<3, 1>.

  • 哦,好极了,我没有看到C++ 0x的这一部分,我一直在讨论模板化的typedef一段时间......我想我应该对最终草案进行更全面的阅读. (41认同)
  • 继承构造函数会使OP的原始解决方案更可行吗? (2认同)
  • @StackedCrooked:取决于他的目标.我会避免继承当组合会做(并且,继承构造函数会使这两者更容易),但是当typedef会这样做时我也避免使用组合. (2认同)
  • 如果我没记错的话, using 不支持专业化,所以第二个选项在很多情况下仍然有用。 (2认同)