Vererbung von Vector<T> an NumericVector<T> Probleme mit operator* u.ä.
-
Dann warte mal ab, bis du mit dem Zeitreihen-Vektor anfängst - mit dem Konvertierungs-Konstruktor kann es dir nämlich ganz schnell passieren, daß du verschiedene Vektortypen bunt durcheinander verrechnest.
-
ein hinweis auf http://www.boost.org/libs/utility/operators.htm ist hier angebracht.
eine möglichkeit, ein duplikat der vector-implementation zu vermeiden, besteht darin, diese als vector basisklasse nach dem typ des vectors zu parametrisieren:
template<typename T, template<typename> class U> class VectorBase { private: T* vectorPtr; COUNTER dim; protected: VectorBase(COUNTER n, const T& initVal); ~VectorBase(){delete [] vectorPtr;} VectorBase(const VectorBase&); VectorBase& operator=(const VectorBase&); public: U<T>& operator+=(const VectorBase&); // hier wird dann ein return static_cast< U<T>& >( *this ) benötigt U<T>& operator-=(const VectorBase&); // usw }; template<typename T, template<typename> class U> U<T> operator+(U<T> lhs, const U<T>& rhs) { return lhs += rhs; } // usw template<typename T> class Vector : public VectorBase< T, Vector > { // ... }; template<typename T> class NumericVector : public VectorBase< T, NumericVector > { // ... };Vector und NumericVector sind jetzt zwei template klassen, die nichts miteinander zu tun haben, die gemeinsame representation der daten ist dennoch nur einmal implementiert. das ist auch keine perfekte lösung...