template-Funktionen
-
Hallo,
wenn ich folgende Funktionen habe:
template<typename T> inline void Save(T &t, char **pp){...} template<typename T> inline void Save(std::vector<T> &v, char **pp){...Save(v[x],pp);...} inline void Save(std::string &s, char **pp){...} ... std::vector<std::string> strvec; char *p; ... Save<std::string>(strvec,&p);
So, bei meinem Funktionsaufruf wird ja nun die zweite template-Funktion mit dem vector als Argument instanziiert. Diese ruft aber wiederum "Save" auf mit jedem vector-Element des Vektors, in meinem konkreten Fall also mit strings. Nun die Frage: wird jetzt die überladene Save-Funktion mit dem String als Argument aufgerufen (hoffentlich!
) oder die andere template-Funktion mit dem String als template-Arg.(hoffentlich nicht)?
Danke schonmal!
-
Die zweite wird aufgerufen, denn du gibts keine Template Argumente an. Allerdings müsste dir das einen Fehler geben (außer vielleicht mit Vc++6), denn das Programm kennt die nicht Templatemethode (die aufgerufen wird) nicht. Schreib Save(std::string... am besten vor die Funktion mitm Vector.
-
OK, danke erstmal.
1. Ich benutz' VC++ 6!
2. Wenn ich die nicht-template-Funktion vorher definiere, dann klappt's also...was ich halt so verwirrend fand war, dass die template-Funktionen auch aufgerufen werden, wenn kein template spezifiziert wird, und da habe ich mich halt gefragt was nun aufgerufen wird wenn es eine generelle template-Funktion gibt (die ja anscheinend auch ohne t-param. aufgerufen werden kann) und eine spezielle Funktion gibt.