Designfrage - Containerklasse mit vector, Objekte mit Bitcontainer



  • unskilled schrieb:

    chocolate_jesus schrieb:

    Ist es wirklich so ungewöhnlich, diese Objekte und Stringlisten dynamisch zu erzeugen?

    Stringliste: auf jeden Fall (edit: ungewöhnlich ist gemeint)
    Objekte: kann man sich streiten. ist das kopieren verboten? Wie sieht das Objekt aus?

    bb

    Die Objekte enthalten ca. 40 AnsiStrings, die über den Namen angesprochen werden müssen, ca. 20 Integer und Long Variablen und ca 100 Bools, die in meinem Bitcontainer gekapselt sind. Dazu noch einen Pointer auf ein Grafikobjekt.

    Die von mir benutzte VCL-Stringlist (TStringList) kann im übrigen nur dynamisch erzeugt werden!



  • Wenn das eine VCL TStringList ist kannst du sie nur dynamisch anlegen. Alles, was von TObject erbt kann nicht als Stackobjekt erzeugt werden.
    Aber vielleicht ist das ganze Design etwas zu kompliziert, was genau möchtest du denn erreichen?



  • DocShoe schrieb:

    Wenn das eine VCL TStringList ist kannst du sie nur dynamisch anlegen. Alles, was von TObject erbt kann nicht als Stackobjekt erzeugt werden.
    Aber vielleicht ist das ganze Design etwas zu kompliziert, was genau möchtest du denn erreichen?

    Von den beschriebenen Datenobjekten muß das Programm ca. 100 (Größenordnung) verwalten, muß sehr oft darauf zugreifen und Datenmember verändern. Bis vor kurzem standen die ca. 100 Boolschen Variablen mit Name in der Klasse, und wurden so angesprochen. Nun soll der Zugriff über den Bitcontainer erfolgen, die Namen der Bits werden in einer Datei gepflegt, die bei Programmstart in eine Stringlist eingelesen wird. Über diese wird der Index ermittelt .



  • Also sowas wie std::map<AnsiString,bool> ?



  • Ja, in der Tat, mit einer map könnte ich dies implementieren. Die Bools kommen
    allerdings bereits in Bitform über die Schnittstelle, und müssen so auch wieder zurück (also als Byte-Buffer, der von meinem Bitcontainer direkt bearbeitet werden kann). Müsste man also noch in die map bringen und zurück, wäre aber vielleicht eine gute Alternative!



  • Ok, die Reihenfolge der Bits ist also fest vorgegeben und hängt nicht vom Bezeichner ab? Damit fiele std::map<AnsiString,bool> natürlich wieder aus, weil std::map nach Schlüsseln sortiert. Eine eigene Klasse (Name + Index) als Key macht das Suchen schon wieder komplizierter.
    Nur noch mal zum Verständnis:

    Deine StringList enthält Bezeichner. Die Position des Bezeichners in der StringListe bestimmt den Index des gesuchten Bits im Bitcontainer?



  • DocShoe schrieb:

    Ok, die Reihenfolge der Bits ist also fest vorgegeben und hängt nicht vom Bezeichner ab? Damit fiele std::map<AnsiString,bool> natürlich wieder aus, weil std::map nach Schlüsseln sortiert. Eine eigene Klasse (Name + Index) als Key macht das Suchen schon wieder komplizierter.
    Nur noch mal zum Verständnis:

    Deine StringList enthält Bezeichner. Die Position des Bezeichners in der StringListe bestimmt den Index des gesuchten Bits im Bitcontainer?

    Genau so!



  • Kannst du deinen Bitcontainer entsprechend umbauen, sodass du zu jedem Index einen Namen und den Status des Bits speichern kannst? Würde das Ganze erheblich vereinfachen, denke ich. Lediglich zum Lesen/Schreiben der Bits musst du sie halt irgendwie in einen Puffer bringen.



  • DocShoe schrieb:

    Kannst du deinen Bitcontainer entsprechend umbauen, sodass du zu jedem Index einen Namen und den Status des Bits speichern kannst? Würde das Ganze erheblich vereinfachen, denke ich. Lediglich zum Lesen/Schreiben der Bits musst du sie halt irgendwie in einen Puffer bringen.

    Das wäre sicher möglich. Ist halt auch die Frage, wie ich performancetechnisch damit fahre. Die Namen für die Bits würden dann ja wieder in jedem einzelnen Objekt mitgeführt werden. Muß ich mal testen...



  • chocolate_jesus schrieb:

    Ist halt auch die Frage, wie ich performancetechnisch damit fahre.

    Nein. Das ist erst dann die Frage, wenn du damit performancetechnisch schlecht fährst. Such erstmal ne Lösung, die übersichtlich und wartbar ist und funtkioniert, bevor du nach einer Lösung suchst, die vielleicht unter Umständen wenn du Glück hast schneller funktioniert.



  • pumuckl schrieb:

    chocolate_jesus schrieb:

    Ist halt auch die Frage, wie ich performancetechnisch damit fahre.

    Nein. Das ist erst dann die Frage, wenn du damit performancetechnisch schlecht fährst. Such erstmal ne Lösung, die übersichtlich und wartbar ist und funtkioniert, bevor du nach einer Lösung suchst, die vielleicht unter Umständen wenn du Glück hast schneller funktioniert.

    Es funktioniert, ist einigermaßen übersichtlich und durchaus wartbar. Dachte, es müsse eine deutlich einfache, besserere Lösung geben.


  • Mod

    Welches? Deine erste Lösung oder map<AnsiString, bool>? Wartbar, übersichtlich und einfach würde ich nämlich das erste nicht nennen.


Anmelden zum Antworten