Funktionstemplatespezialisierung und Module



  • Ich hätte da mal ne Frage zu Funktionstemplatespezialisierung, müssen die auch in ein Header oder nicht. Also geht folgendes:
    Header foo.h:

    template<class T>
    T foo(const T&t){return t*t;}
    

    Module1:

    #include"foo.h"
    int main(){
      int a=5;
      int b=spr(a);
    }
    

    Module2:

    #include"foo.h"
    int foo(const int&i){return i;}
    

    Soll b nun 5 oder 25 sein?



  • int foo(const int&i){return i;}
    

    Das hier ist keine Template-Spezialisierung, sondern ein Funktions-Definition. Eine explizite Spezialisierung sieht so aus:

    template<> int foo(int a) { return a; }
    

    Wenn eine Template und non-Template Version einer Funktion existieren, wird immer die zweite Variante genommen, d.h. b falls spr foo heißen sollte, wird 5 sein.


Anmelden zum Antworten