Member einem Template hinzufügen



  • Abend,

    zunächst mal sorry für den blöden Titel - mir ist kein besserer eingefallen.
    Mein Problem: Ich habe eine Vektor Template Klasse:

    template <class T>
    class Vector3 { ... };
    

    und auf bestimmte Typen von Vektoren (die ich häufig brauche) Typedefs:

    typedef Vector3<float>  Vec3f;
    typedef Vector3<double> Vec3d;
    

    Jetzt möchte ich den "typdef Typen" Vec3f, Vec3d etc. noch ein paar Konstanten (static const ...) spendieren, z.B. den Nullvektor, den Einheitsvektor in X-Richtung usw.
    In meinem Code möchte ich das dann so benutzen:

    Vec3f v = Vec3f::ZERO;     // ZERO ist ein static const Vec3<float>
    Vec3f v2 = Vec3f::UNITY_X;
    

    Aber ich kann ja meinen "typedef Typen" nicht einfach neue Member (ZERO, UNITY_X) hinzufügen. Wie könnte ich das machen, dass meine "spezialisierten" Vector3's diese Konstanten bekommen?



  • Wie wäre es, wenn du die in deine Klasse packst?

    Wenn die Member speziell je nach Typ sind, kannst du die Klasse spezialisieren.



  • Also meine Klasse sieht jetzt so aus:

    // Vector3.h
    template <class T>
    class Vector3 {
    public:
    static const Vector3<T> ZERO;
    ...
    };
    
    template <class T> const Vector3<T> Vector3<T>::ZERO(0,0,0);
    

    Passt das so? Ist das ok, dass die Definition mit im Header steht?



  • Sollte OK sein, ja.

    Hab das bisher nur mit atomaren Typen (int, Zeiger etc.) verwendet, aber sehe keinen Grund warum es mit einer Klassen-Instanz nicht gehen sollte.


Anmelden zum Antworten