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?
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.
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.