<T> überflüssig bei Typ in Templatemethode?
-
Hallo,
ich habe ein Klassentemplate Vector:
template <class T> Vector { ... };Mir ist gerade aufgefallen, dass ich bei einer Methode offenbar das <T> beim Typen weglassen kann:
template <class T> Vector<T>& Vector<T>::operator*=(const Vector& rhs)Ich übergebe hier einen Vector und NICHT einen Vector<T> und dennoch klappt alles wunderbar. Wieso funktioniert das? Ist das ein Bug des Compilers VC? Oder sind beide Schreibweisen äquivalent?
-
Sind äquivalent
-
safthuhn schrieb:
Wieso funktioniert das?
In einem Klassentemplate ist der Klassenname ohne Templateparameter äquivalent zum Klassennamen mit Templateparameter. Kurzes Beispiel:
template<typename T> struct Test { // hier drin ist der Typ Test gleich wie Test<T> // Wurde zur Vereinfachung eingeführt, ist also im Standard definiert. };Nun zu deiner Funktion und wieso es dort funktioniert:
Vector<T>& Vector<T>::operator*=(const Vector& rhs) // ausserhalb der Klasse| innerhalb der KlasseAlso sobald man
Vector<T>::hingeschrieben hat, befindet man sich im Scope der Klasse.Grüssli