Bonjour à tous
J'utilise le tag dispatching et la spécialisation partielle pour spécialiser des classes, par exemple en vector :
J'utilise également dans un cas un std::vector comme spécialisation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 class any_tag; template<typename T, typename Tag> struct vector {}; template<typename T> struct vector<T, any_tag> {};
Je suis alors obligé d'exposer les fonctionnalités de std::vector :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 class std_vector_tag; template<typename T> struct vector<T, std_vector_tag> : private std::vector<T> {};
(j'utilise l'héritage privé puisque le destructeur de std::vector est public et non virtuel)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 vector(size_type n = 0, const T& value= T()) : std::vector<T>(n, value) {} reference operator[] (size_type n) { return operator[] (n); } const_reference operator[] (size_type n) const { return operator[] (n); } // etc.
Peut-on quand même se permettre d'utiliser l'héritage public dans ce cas ? (question purement rhétorique, ça resterait dangereux a priori)
En fait, ce qui m'intéresserait, c'est d'utiliser un template alias pour créer un alias de std::vector dans le cas d'une spécialisation partielle. Par exemple quelque chose comme ça :
Si quelqu'un a une idée si c'est faisable et comment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 template<class T> using vector<T, std_vector_tag> = std::vector<T>;
Merci
EDIT : en fait, chez moi (gcc 4.7 ubuntu 11.04), les templates alias et la directive -std=c++11 ne fonctionnent pasalors que normalement, ça devrait fonctionner. Un idée ?
gcc version 4.7.0 20111010 (experimental) [trunk revision 179769] (Ubuntu/Linaro 20111010-0ubuntu1)gcc: error: unrecognized command line option '-std=c++11'
Partager