私はクラスがあります
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>
{ };
解決策はありますか、それともあまり高価ではない回避策/ベストプラクティスはありますか?
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>
と同等です。