2009-04-12 9 views
1

Lorsque vous utilisez une classe de conteneur telle que vector, list, etc., je peux utiliser le type des éléments en écrivant vector<type>::value_type.Utilisation de types définis dans les arguments de modèle

Cependant, le code suivant

template<class container> 
void foo(container& c) 
{ 
    typedef container::value_type elementtype; 
    elementtype b; 
}

échoue avec l'erreur "expected initializer before ‘elementtype’". Est-il possible de déduire le type d'élément lorsque le type de conteneur est donné en tant qu'argument modèle ou dois-je donner le type d'élément en tant qu'argument de modèle supplémentaire?

Répondre

12

Vous êtes absent le mot-clé typename requis:

typedef typename container::value_type elementtype; 

C'est parce que container est un nom dépendant dans ce modèle, de sorte que le compilateur n'a aucun moyen de savoir si conteneur :: value_type est toujours tapez ou non, car cela peut dépendre du choix de container.

Sûrement cette question est quelque part?

Modifier, il est: http://www.parashift.com/c++-faq-lite/templates.html#faq-35.18

Questions connexes