[template] STL container als template
-
wieso funktioniert folgendes nicht:
template<class STLcontainer> void foo(STLcontainer& container> { STLcontainer::iterator pos; for(pos=container.begin(); pos!=container.end(); ++pos) { cout<<*pos<<endl; } }hier erhalte ich mit gcc3.4 immer die Fehlermeldung:
"expected ';' for pos
mit vs 8.0 gibt es keinerlei problemetemplates werden doch erst bei inanspruchnahme mit den entsprechenden parameters kompiliert (dacht ich immer). so, dass ich fehlermedlung wie bei dem beispiel:
int main() { vector<int> vec; foo(vec); int test=0; foo(test); return 0; }natülich die fehlermeldung "::iterator kein element von int" erwarten würde.
generell habe ich auf die schnelle nichts gefunden, wie man elegant ein template mit einer bestimmten klasse als template paramter verwendet:
sowas wie:template< typename T> //T soll irgendein STLcontainer mit inhalt "class ToWriter" sein void foo(...) { ... }
-
Wenn der Compiler aus dem allgemeinen Kontext nicht erkennen kann, was du willst, vermutet er eine Variable. Deshalb mußt du notfalls 'typename' verwenden, um zu kennzeichnen, daß du einen Untertyp ansprechen willst:
template<class STLcontainer> void foo(STLcontainer& container> { typename STLcontainer::iterator pos; ... }
-
alles klar. also sollte man "typename" immer anwenden, wenn man nested classes in template methoden verwendet.
-
muffmolch schrieb:
alles klar. also sollte man "typename" immer anwenden, wenn man nested classes in template methoden verwendet.
Weiß nicht ... aber auf jeden Fall sollte man "typename" verwenden, wenn der folgende Ausdruck sonst auch als (static-)Element einer Klasse mißverstanden werden könnte.
Gruß,
Simon2.
-
muffmolch schrieb:
alles klar. also sollte man "typename" immer anwenden, wenn man nested classes in template methoden verwendet.
Anders/Besser ausgedrückt: ... Vom Templateparameter abhängige Namen ...
-
Freak_Coder schrieb:
muffmolch schrieb:
alles klar. also sollte man "typename" immer anwenden, wenn man nested classes in template methoden verwendet.
Anders/Besser ausgedrückt: ... Vom Templateparameter abhängige Namen ...
oder so
