std::vector in eigenes Namespace unter neuem Namen importieren
-
Achso. Ich hatte gedacht das es nicht auf das große 'V' ankommt. Naja, dafür weiß ich keine Lösung.
Vielleicht musste auf template-typedefs warten..
-
Wenn es nicht um die Template-Eigenschaft geht, kannst du auch Vector von std::vector<Typ> ableiten und die Konstruktoren implementieren.
-
Die Templateeigenschaft moechte ich schon beibehalten. Das ist es ja. Sonst koennte ich ja auch einfach typedef std::vector< TYP > Vector machen.
Es scheint wohl in der Tat nicht zu gehen: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndeepc/html/deep08032000.asp. Schade.
-
Izz, was schreib ich denn, gerade dann geht das:
template <typename T> class Vector : public std::vector<T> { // alle benötigten Konstruktoren implementieren };
-
Man betrachte folgenden Fall:
template <typename T> class Vector : public std::vector<T> { // alle benötigten Konstruktoren implementieren }; int main() { Vector* v = new Vector<int>; delete v; // destructor von std::vector wird nicht aufgerufen da nicht virtual return 0; }Das ist keine praktikable Loesung.
-
Quark, der Destructor von Basisklassen wird immer aufgerufen. Virtual ist für die andere Richtung verantwortlich.
-
In the first alternative (delete object), if the static type of the operand is different from its dynamic type, the
static type shall be a base class of the operand’s dynamic type and the static type shall have a virtual
destructor or the behavior is undefined.Gruß
-
LordJaxom schrieb:
Quark, der Destructor von Basisklassen wird immer aufgerufen. Virtual ist für die andere Richtung verantwortlich.
class Base { }; class Derieved : public Base { }; int main() { Base* b = new Base(); delete b; // hier soll der destructor von derieved aufgerufen werden? :open_mouth: return 0; }
-
dein erstes beispiel war aber
Derived *d = new Derived()und da geht das.
-
@Apollon:
Schliesse mit surfingusw an, das zweite Beispiel ist genau die andere Richtung, die ich im letzten Post auch erwähnte
-
@Apollon
In Ermangelung eines Template-Typedefs bleibt dir folgende Annäherung:#include <vector> namespace Foo { template <class T> struct VectorT { typedef std::vector<T> type; }; // und später void func() { VectorT<int>::type v; } }