iteratoren in funktionstemplates
-
hi. wollte mit grad folgendes template schreiben (vereinfacht) :
template<typename T>
void fun(const std::vector<T>& v, T b)
{
typename std::vector<T>::const_iterator iter_t; //Typanmeldung funktioniert
iter_t i = v.begin(); // Instanziierung dieses Typs funktioniert nicht
...
}Woran liegt das?
-
void fun(const std::vector<T>& v, T b) { typename std::vector<T>::const_iterator iter_t; iter_t=v.begin(); ... }
-
hab's zeitgleich eben rausgekriegt.
trotzdem dankeschön.aber wieso wird mit der typendeklaration gleichzeitig der iterator angelegt?
versteh ich irgendwie nicht...
-
Du verwechselst bestimmt typename mit typedef. typename wird nur benutzt wenn man auf Elemente von nem Template-Type zugreifen möchte, was hier der fall ist. Mit typedef erzeiugt man eigene "Pseudeo-"Typen:
/* * Zugriff auf ein Element (const_iterator) vom Template-Type (std::vector < T >) */ typename std::vector<T>::const_iterator iter_t; /* * Mit typedef einen Pseudo-Type erzeugt. */ typedef typename std::vector<T>::const_iterator iter_t; iter_t it; //Ergibt dasselbe wie beim ersten "Fall".
-
Konrad schrieb:
Du verwechselst bestimmt typename mit typedef. typename wird nur benutzt wenn man auf Elemente von nem Template-Type zugreifen möchte, was hier der fall ist. Mit typedef erzeiugt man eigene "Pseudeo-"Typen:
/* * Zugriff auf ein Element (const_iterator) vom Template-Type (std::vector < T >) */ typename std::vector<T>::const_iterator iter_t; /* * Mit typedef einen Pseudo-Type erzeugt. */ typedef typename std::vector<T>::const_iterator iter_t; iter_t it; //Ergibt dasselbe wie beim ersten "Fall".afaik wird der 2 fall aber nichts.
-
Cpt.Tanga schrieb:
Konrad schrieb:
Du verwechselst bestimmt typename mit typedef. typename wird nur benutzt wenn man auf Elemente von nem Template-Type zugreifen möchte, was hier der fall ist. Mit typedef erzeiugt man eigene "Pseudeo-"Typen:
/* * Zugriff auf ein Element (const_iterator) vom Template-Type (std::vector < T >) */ typename std::vector<T>::const_iterator iter_t; /* * Mit typedef einen Pseudo-Type erzeugt. */ typedef typename std::vector<T>::const_iterator iter_t; iter_t it; //Ergibt dasselbe wie beim ersten "Fall".afaik wird der 2 fall aber nichts.
Warum sollte denn das typedef nicht möglich sein ?
Also afaik ist es doch nen normales /legales typedef.?
-
shapeless schrieb:
Cpt.Tanga schrieb:
Konrad schrieb:
Du verwechselst bestimmt typename mit typedef. typename wird nur benutzt wenn man auf Elemente von nem Template-Type zugreifen möchte, was hier der fall ist. Mit typedef erzeiugt man eigene "Pseudeo-"Typen:
/* * Zugriff auf ein Element (const_iterator) vom Template-Type (std::vector < T >) */ typename std::vector<T>::const_iterator iter_t; /* * Mit typedef einen Pseudo-Type erzeugt. */ typedef typename std::vector<T>::const_iterator iter_t; iter_t it; //Ergibt dasselbe wie beim ersten "Fall".afaik wird der 2 fall aber nichts.
Warum sollte denn das typedef nicht möglich sein ?
Also afaik ist es doch nen normales /legales typedef.?irrtum meinerseits wuerde ich sagen. hatte noch in tiefer erinnerung was davon haengen wie typedef typename T::bla.... waere (noch) nicht legaler code. ka woher ich das hatte. aber wie ja auch an deiner signatur zu sehen ist scheine ich mich ja zu irren
:p