default Typ bei Vektoren?



  • Nexus schrieb:

    ...In letzter Zeit kommen irgendwie viele, die eine Variable für alle möglichen Typen nutzen wollen....

    War das nicht schon immer so?
    Ist doch eigetnlich ein typisches Kennzeichen für Anfänger und/oder Java-Umsteiger... einer der typischen "sieht-erstmal-einfacher-aus-und-erst-später-merkt-die Schmerzen"-Phänomen (oder anders ausgedrückt: "Ohne Beine ist man natürlich leichter ... und trotzdem langsamer" 😉 ).

    Gruß,

    Simon2.



  • naja void* ist da bischen schlecht... wenn man aber ne Basisklasse als Default typ nimmt, und die entsprechenen Typen ableitet und schön polymorphy benutzt, muss man den typ nich unbeding kennen...



  • Nexus schrieb:

    Wieso erstellst du für unterschiedliche Objekte nicht unterschiedliche Container? Dann könntest du innerhalb eines Containers alle Objekte gleich behandeln.

    Also wahrscheinlich werde ich es dann auch so machen...irgendwas anderes als string,int,datum und vielleicht noch sowatt wie ein Icon braucht man ja bei Dateien auch sowieso nicht speichern, weil die meisten Eigenschaften meistens sowieso strings sind...
    @BorisDieKlinge: Hast du vielleicht ein kurzes Beispiel zu dem was du sagst?? Ansonsten versuche ich das selber herauszufinden...



  • BorisDieKlinge schrieb:

    naja void* ist da bischen schlecht... wenn man aber ne Basisklasse als Default typ nimmt, und die entsprechenen Typen ableitet und schön polymorphy benutzt, muss man den typ nich unbeding kennen...

    Wobei Polymorphie auch nicht die Lösung aller Probleme ist. Der Sinnvolle Einsatz von Polymorphie ist nur gegeben, wenn die Typen untereinander soviele Gemeinsamkeiten haben, das man in der Regel mit dieser Basisschnittstelle arbeiten kann, und nur selten auf Konvertierungen wie dynamic_cast oder ähnliches zurückgreifen muss.

    In vielen Fällen ist dies nicht gegeben, und manche versuchen dann eine Basisklasse einzufügen, die nichts anderes macht als dafür zu sorgen das es eine Basisklasse gibt. Ohne irgendwelche Zusammenhänge und gemeinsame Schnittstellen (Wieso kommen mir hier nur die Typischen xyzObjekt-Hierachien in den Sinn... sei es nun TObject oder wie sie alle heißen).

    cu André



  • naja ich weis ja nich was für typen du da speichern willst



  • BorisDieKlinge schrieb:

    naja ich weis ja nich was für typen du da speichern willst

    Technohead schrieb:

    Irgendwo anders habe ich gelesen, dass man da was mit Polymorphie was machen kann- was mir bei Klassen einleuchten würde, aber nicht bei "Grundtypen", wie wxString, int oder ähnliches.....

    Zumindestens nach seinem ersten Angaben denke ich, das es sich nicht um geeignete Elemente für Polymorphie halten wird.

    @Technohead: In meinen etwa 10 Jahren C++ Erfahrung kam ich zwar auch ab und zu in die Überlegung alles in einen Container stopfen zu wollen, aber immer habe ich dann eine andere (bessere) Lösung gefunden. Varianttypen etc. verwende ich nur wenn es die Schnittstelle erzwingt, ansonsten gibt es immer Alternativen.

    cu André



  • asc schrieb:

    @Technohead: In meinen etwa 10 Jahren C++ Erfahrung kam ich zwar auch ab und zu in die Überlegung alles in einen Container stopfen zu wollen, aber immer habe ich dann eine andere (bessere) Lösung gefunden. Varianttypen etc. verwende ich nur wenn es die Schnittstelle erzwingt, ansonsten gibt es immer Alternativen.

    cu André

    Na gut....dann werde ich das wohl so machen, wie ich schon in meinem anderen Post angedeutet habe. Bin nur zum ersten Mal in meinem Leben irgendwie so richtig über Templates gestoßen weil ich davor irgendwie immer zu faul war das zu lernen 🙄 und dachte da gäbe es vielleicht eine besonders elegante Lösung für mein Problem. Aber ich denke mal an dein Statement werde ich mich dann in Zukunft wohl auch halten und mir andere Lösungen überlegen. Vielen Dank 🙂
    @Boris: Lass mal gut sein mit Beispiel und so...werde da mit Sicherheit was online finden. Danke!!



  • Technohead schrieb:

    irgendwas anderes als string,int,datum und vielleicht noch sowatt wie ein Icon braucht man ja bei Dateien auch sowieso nicht speichern, weil die meisten Eigenschaften meistens sowieso strings sind...

    Wäre evtl sowas eine Lösung für dich?:

    struct FileProperties
    {
        Time creation, last_access, last_write;
        int  size;
        Icon icon;
        ...
    };
    
    map<wxString,FileProperties> DateiTabelle;
    

    Geht natürlich nur, wenn im vorhinein alle Eigenschaften der Datei feststehen.



  • Aber da sollte ich doch lieber ne Union nehmen, damit nicht immer auch Speicherplatz für das Icon benötigt wird, wenn ich nur einen Dateinamen speichern will- oder??



  • Ne, lass hier die Finger von unions. Vielleicht hab ich dich auch falsch verstanden, du willst doch auf jeweils einen Dateinamen ein paar Datei-Attribute abbilden, oder nicht? Wenn du Platzmangel hast, ist die struct aber der falsche Weg, das stimmt.



  • scheiß Browser.....ich hab das gleich dreimal gepostet...sry



  • Na ich würde es so machen:

    union FileProperties
    {
        Time creation, last_access, last_write;
        int  size;
        Icon icon;
        ...
    };
    
    map<wxString,vector<FileProperties>> DateiTabelle;
    

    Die Reihen der Tabelle sollen indiziert sein, damit es leicht ist zu sortieren- man muss nur in einem Vektor die Sortierung abspeichern- also die jeweiligen Indizes und muss nicht die gesamte Struktur ändern, oder irgendein Gedöns mit Pointern machen.



  • s.o. 😉



  • Man kann unions schon nicht benutzen, wenn Klassen drin verwendet werden. Ist ja auch logisch, weil man sich sonst alleine schon mit Konstruktoren und Desktruktoren in die Haare bekommt 🙂



  • aber abgesehen davon würde es nur mit falschem Auslesen Probleme geben- oder gibt es da noch mehr Sachen, wo man sich Fehler einfangen kann?



  • Technohead schrieb:

    aber abgesehen davon würde es nur mit falschem Auslesen Probleme geben- oder gibt es da noch mehr Sachen, wo man sich Fehler einfangen kann?

    Ich denke, das sollte als Begründung reichen.

    Aber sonst könnte man noch gegen union s sagen, dass sie Speicherplatz verschwenden (Uniongrösse entspricht Grösse des grössten Members), dass man separat speichern muss, welcher Typ gerade benutzt wird, dass man sowohl falsch lesen als auch falsch schreiben kann, und dass union s nicht mit Klassen funktionieren.

    Technohead, kannst du mir sagen, was dich so sehr an mehreren Containern (für jeden Typ einen) stört?



  • Eigentlich nichts..habe es jetzt auch so gelöst:

    struct ATTRIBUTE{
        int iInteger;
        [...]
    };
    
    map<wxString,vector<ATTRIBUTE>>;
    

    und habe dann halt die ganzen Typen in die Struktur geschrieben, die ich so brauche. Hab halt nur gedacht es würde vielleicht irgendeine super elegante Lösung geben 😉 Die Lösung ist aber schon gut genug und wie ich gerade auch sehe völlig ausreichend!!

    MfG Jonas 😃 😉



  • Von der folgenden Benennung möchte ich dir abraten:

    Technohead schrieb:

    struct ATTRIBUTE{
        int iInteger;
        [...]
    };
    

    In der Regel werden Makros in Großbuchstaben gesetzt, deine Namenskonfention ist zumindestens allen mir bekannten Richtlinien zuwider, undabhängig wie die einzelnen Strukturen benennen.

    P.S: Das ich von der UN wie bei iInteger auch nichts halte ist Geschmackssache, nur das mit der Großschreibung kenne ich nirgends



  • asc schrieb:

    P.S: Das ich von der UN wie bei iInteger auch nichts halte ist Geschmackssache, nur das mit der Großschreibung kenne ich nirgends

    *Hust* DirectX *Hust* 😉



  • drakon schrieb:

    *Hust* DirectX *Hust* 😉

    Gesundheit, ja von dieser Krankheit habe ich gehört (und tatsächlich verdrängt).


Anmelden zum Antworten