std::vector in eigenes Namespace unter neuem Namen importieren
-
Hallo.
Ich moechte folgendes machen
namespace AB { typedef std::vector Vector; }Wie ihr euch denken koennt, funktioniert das so nicht. Wie mache ich es richtig? Geht sowas ueberhaupt? Ich habe schon diverse Moeglichkeiten (mit typename und template und ...) ausprobiert. Vergeblich.
Danke.
-
Hallo,
haste mal using versucht?
-
Du meinst
namespace AB { using std::vector; }Ich will es ja so nicht haben. Ich will es als Vector und nicht vector haben (Ich habe einen Grund dafuer aber bitte nicht danach fragen).
-
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; } }