<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


  • Administrator

    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 Klasse
    

    Also sobald man Vector<T>:: hingeschrieben hat, befindet man sich im Scope der Klasse.

    Grüssli


Anmelden zum Antworten