web-dev-qa-db-ja.com

C ++テンプレートのtypedef

私はクラスがあります

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

サイズNと1のtypedefと同等のVector(列ベクトル)を作成するMatrixを作成したいと思います。

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

これはコンパイルエラーを引き起こします。次は似たようなものを作成しますが、私が欲しいものとは異なります。

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

解決策はありますか、それともあまり高価ではない回避策/ベストプラクティスはありますか?

338
Notinlist

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>::typeMatrix<3, 1>と同等です。

509
GManNickG