2013-01-03 2 views
1

Je veux que MyVector puisse choisir std :: vector ou boost :: container :: vector. Comment l'implémenter? Je peux utiliser des macros, mais ce qu'on m'a dit c'est qu'elles ne sont pas très sûres. Merci.Comment générer un alias pour les modèles de classe?

#define MyVector std::vector 
// #define MyVector boost::container::vector 

Répondre

11

C++ 11 possède des modèles d'alias. Vous pouvez faire:

template <typename T> 
using MyVector = std::vector<T>; 
//using MyVector = boost::container::vector<T>; 

Et puis utiliser comme ceci:

MyVector<int> x; 

En C de 03 vous pouvez soit utiliser des macros ou un métafonction.

template <typename T> 
struct MyVector { 
    typedef std::vector<T> type; 
    //typedef boost::container::vector<T> type; 
}; 
// usage is a bit tricky 
MyVector<int>::type x; 
// ... or when used in a template 
typename MyVector<T>::type x; 
+0

hmm ... Je crois qu'il ya quelque chose de bizarre avec le membre 'type' typedeffing deux types différents :) – xtofl

+0

@xtofl oups, a oublié de le commenter. –

Questions connexes