web-dev-qa-db-ja.com

テンプレートクラスをtypedefする方法は?

typedef a template class?次のようなもの:

typedef std::vector myVector;  // <--- compiler error

私は2つの方法を知っています:

(1) #define myVector std::vector // not so good
(2) template<typename T>
    struct myVector { typedef std::vector<T> type; }; // verbose

C++ 0xにはもっと良いものがありますか?

71
iammilind

はい。これは「 エイリアステンプレート 」と呼ばれ、C++ 11の新機能です。

template<typename T>
using MyVector = std::vector<T, MyCustomAllocator<T>>;

使用法は、予想どおりになります。

MyVector<int> x; // same as: std::vector<int, MyCustomAllocator<int>>

GCCは4.7以降、Clangは3.0以降、MSVCは2013 SP4でサポートしています。

123
Travis Gockel

C++ 03では、クラスから(パブリックまたはプライベートに)継承することができます。

template <typename T>
class MyVector : public std::vector<T, MyCustomAllocator<T> > {};

もう少し作業を行う必要があります(具体的には、コンストラクター、代入演算子をコピーします)が、かなり実行可能です。

15
dascandy