Template Funktion ausführen ohne Typ anzugeben



  • hi,

    Ich benutze Codeblocks mit dem beigelieferten g++.
    Mir ist etwas extrem seltsames passiert.
    Ich habe eine ganz normale template funktion gebaut.

    Bsp:

    template<typename Type>
    void func(Type a,Type b)
    {
    ...
    }
    

    Diese habe ich dann im Programm benutzt

    char a,b;
    func(a,b);
    

    Das funktioniert tadellos.

    Doch wer aufmerksam gelesen hat wird merken, dass ich gar nich

    func<char>(a,b)
    

    geschrieben habe.

    Warum funktioniert es?



  • hoi

    Lobart schrieb:

    Doch wer aufmerksam gelesen hat wird merken, dass ich gar nich

    func<char>(a,b)
    

    geschrieben habe.

    das wuerdest du schreiben wenn du z.b. folgende funktion haettest:

    template<typename T>
    T func(int a, int b)
    {
       ...
    }
    

    hier musst du naemlich '<char>' angeben, damit der kompiler weiß was T sein soll. ansonsten weiß der kompiler das er fuer 'T' das int einsetzen muss.

    Meep Meep



  • Das nennt sich Template Argument Deduction.



  • lolz schrieb:

    Das nennt sich Template Argument Deduction.

    und bedeutet in Kurzfassung, daß der Compiler aus den Parametern erkennt, welche Spezialisierung er benötigt - du hast der Funktion char's übergeben, also erzeugt er dir die char-Version der Funktion (bei int-Parametern würde er die func<int> anlegen, bei gemischten Parametern würde er dir eine Fehlermeldung um die Ohren hauen).


Anmelden zum Antworten