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.


Anmelden zum Antworten