C ++模板typedef


368

我有一堂课

template<size_t N, size_t M>
class Matrix {
    // ....
};

我想制作一个typedef创建一个Vector(列向量),它等效于一个Matrix大小为N和1的东西。

typedef Matrix<N,1> Vector<N>;

产生编译错误。以下创建类似的东西,但不完全是我想要的东西:

template <size_t N>
class Vector: public Matrix<N,1>
{ };

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

Answers:


548

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

template <size_t N>
using Vector = Matrix<N, 1>;

该类型Vector<3>等效于Matrix<3, 1>


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

template <size_t N>
struct Vector
{
    typedef Matrix<N, 1> type;
};

在这里,类型Vector<3>::type等同于Matrix<3, 1>


45
哦,太好了,我还没看过C ++ 0x的这一部分,而且一段时间以来我一直在讨论模板化的typedef ...我想我应该对最终草案有更深入的了解。
Matthieu M. 2010年

2
继承构造函数会使OP的原始解决方案更可行吗?
StackedCrooked

2
@StackedCrooked:取决于他的目标。我会避免在编写组合函数时会继承(是的,继承构造函数会使这两个过程都更容易),但是我也会避免在typedef编写函数时进行组合。
GManNickG 2012年

1
如果我没记错的话,using不支持专业化,所以第二种选择在许多情况下仍然有用。
Utkarsh Bhardwaj,2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.