template alias et spécialisation partielle
Bonjour à tous
J'utilise le tag dispatching et la spécialisation partielle pour spécialiser des classes, par exemple en vector :
Code:
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> {}; |
J'utilise également dans un cas un std::vector comme spécialisation :
Code:
1 2 3 4 5
| class std_vector_tag;
template<typename T>
struct vector<T, std_vector_tag> : private std::vector<T>
{}; |
Je suis alors obligé d'exposer les fonctionnalités de std::vector :
Code:
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. |
(j'utilise l'héritage privé puisque le destructeur de std::vector est public et non virtuel)
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 :
Code:
1 2
| template<class T>
using vector<T, std_vector_tag> = std::vector<T>; |
Si quelqu'un a une idée si c'est faisable et comment.
Merci
EDIT : en fait, chez moi (gcc 4.7 ubuntu 11.04), les templates alias et la directive -std=c++11 ne fonctionnent pas :cry: alors que normalement, ça devrait fonctionner. Un idée ?
Citation:
gcc version 4.7.0 20111010 (experimental) [trunk revision 179769] (Ubuntu/Linaro 20111010-0ubuntu1)
Citation:
gcc: error: unrecognized command line option '-std=c++11'