Je dois déclarer Iter
comme typename
mais pas typedef
.
Alors, je ne peux pas utiliser Iter
dans mon template
class
déclaration => frustrant :(
S'il vous plaît me apprendre comment utiliser Iter
, ou bien me expliquer pourquoi C++ est si nasty ...classe modèle type imbriqué type nom
template <typename T>
struct MyContainer
{
typedef std::vector<T> Vec;
typename Vec::iterator Iter;
void Fo (typename std::vector<T>::iterator); //ok
typename std::vector<T>::iterator Ba(); //ok
void Foo (Iter); //error: 'Iter' is not a type
Iter Bar(); //error: 'Iter' does not name a type
}; //(gcc 4.1.2)
- Pourquoi
typedef
ne peut pas être utilisé pour déclarerIter
? Pourquoi pas? - Comment utiliser
Iter
dans letemplate
class
? (par exemple, le type de paramètre de fonction)
EDIT
Dans l'instruction typename Vec::iterator Iter;
le mot-clé typename
dit Vec::iterator
est un type (à savoir pas une fonction/attribut de membre statique). Par conséquent, Iter
n'est pas déclaré en tant que type, mais en tant que variable en utilisant le type Vec::iterator
.
:) parfait Je viens d'ajouter dans votre réponse la solution code source :-D merci;) – olibre
@olibre En ce qui concerne votre modification à cette réponse (que j'ai annulé): Il est possible d'utiliser blockquote dans les énumérations en indentant deux fois (4 + 4 = 8 espaces). Pas besoin de syntaxe d'énumération inhabituelle ... – jogojapan
@jogojapan Merci pour votre conseil/astuce :-D – olibre