web-dev-qa-db-fra.com

Comment taper une classe de modèle?

Comment dois-je typedef a template class? Quelque chose comme:

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

Je connais 2 façons:

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

Avons-nous quelque chose de mieux en C++ 0x?

71
iammilind

Oui. Il est appelé " modèle d'alias " et c'est une nouvelle fonctionnalité en C++ 11.

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

L'utilisation serait alors exactement ce que vous attendez:

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

GCC le prend en charge depuis 4.7, Clang l'a depuis 3.0 et MSVC l'a en 2013 SP4.

123
Travis Gockel

En C++ 03, vous pouvez hériter d'une classe (publiquement ou en privé) pour ce faire.

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

Vous devez faire un peu plus de travail (en particulier, les constructeurs de copie, les opérateurs d'affectation) mais c'est tout à fait faisable.

15
dascandy