Frage ist der Code. Es sieht so aus, als ob die 2. Funktion spezieller ist als die 1. Funktion. Warum wird der allgemeinere im folgenden Code aufgerufen? Wie kann ich die andere Funktion verwenden?Überladung Auflösung von Funktionsvorlagen
template <typename T>
class Base{
public:
Base(){}
void print() const {cout<<"Base class"<<endl;}
};
template <typename T>
class Derived :public Base<T>{
public:
Derived() {}
void print() const {cout<<"Derived class"<<endl;}
};
template <typename T>
void func(T x){ // <----- Why is function is called?
x.print();
cout<<"in func(T)"<<endl;
}
template <typename T>
void func(const Base<T>& x){
x.print();
cout<<"in func(Base<T>)"<<endl;
}
int main() {
Base<int> b;
Derived<int> d;
func(d);
return 0;
}
Beachten Sie, dass ich das Derived-Objekt an die Funktion übergebe.
Dieser Beitrag kann Ihnen helfen: http://stackoverflow.com/questions/22411482/c-template-functions-overload-resolution. Siehe die Antwort von @NikosAthanasiou. – chema989
Mögliches Duplikat von: http://stackoverflow.com/questions/31563580/c-templated-function-overloading-rules?lq=1 – sameerkn