Template Spezialisierung



  • Guten Morgen,
    ich hab folgendes Problem. Ich hab mir ein Klassentemplate CVektorT<typename T> gebastelt, in dem ich sowohl int, double als auch rationale Zahlen packen will. Das funktioniert soweit auch. Wenn ich aber nun zwei Variablen unterschiedlichen Typs hab, krieg ich es nicht hin, dass dafür eine Zuweisung erlaubt ist. Die Zuweisung müsste natürlich spezialisiert werden, wobei ich schon bei meiner Vermutung wäre, dies durch Template-Spezialisierung zu erreichen, ich weiss aber nicht, wie ich das realisieren könnte. Bsp:

    CVektorT<double> vekEins;    //Vektor vom Typ double
    CVektorT<CRational> vekZwei; //Vektor mit rationalen Zahlen
    vekEins = vekZwei;           //Problem !!!
    

    Ich hoffe jemand kann mir helfen, Grüsse
    CatDog



  • Moin,
    Du brauchst ein Zuweisungsoperatortemplate. Alternativ kannst du auch ein nicht explicites Kopiekontruktortemplate schreiben und in der Zuweisung mit copy/swap arbeiten.

    template<typename T>
    class Vector
    {
    public:
      template<typename T2>
      Vector& operator=(const Vector<T2>& other)
      { 
         // ... ?
         return *this;
      }
    };
    
    template<typename T>
    class Vector
    {
    public:
        template<typename T2>
        Vector(const Vector<T2>& other)
        {
            // ...
        }
    
        Vector& operator=(Vector other)
        { 
            Swap(other);
            return *this;
        }
    
        void Swap(Vector& other)
        {
            std::swap(/*..*/);
        }
    };
    

    In beiden Varianten hast du übrigens keinen Zugriff auf private oder geschützte Daten, da es sich bei Vector<T2> um eine fremde Klasse handelt.


Log in to reply