78 votes

Comment dactylographier une classe de template?

Comment devrais-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?

137voto

Travis Gockel Points 11043

Oui. C'est ce qu'on appelle un " modèle d'alias " et c'est une nouvelle fonctionnalité de C ++ 11.

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

L'utilisation serait alors exactement comme vous le souhaitiez:

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

GCC le supporte depuis la version 4.7 et Clang depuis la version 3.0.

18voto

dascandy Points 2818

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

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X