Integer Klassenhierarchie



  • Hallo,
    da ich verschiedene Integertypen (int8, int16, int32, uint8,...) und auch andere werte in einer Liste speicher möchte wollte ich nachfragen wie die Klassenhierarchie hierzu am besten ausschauen könnte.
    Mache ich da am besten eine Klasse mit einer Member mit dem Typ und beim setzten von Werten immer überprüfen ob der Wertebereich verletzt wird oder je ne Int und ne UInt Klasse oder 6 Klassen...?

    Thx für eure Meinungen.
    Gruß, Tom.



  • Also eine Unterscheidung für alle Integer halte ich für wenig sinnvoll. Wenn überhaupt, dann würde ich maximal in sint und uint unterscheiden und dann halt den Integertyp mit dem grössten Wertebereich verwenden. Dann würde ich aber auch zwei separate Listen verwenden. Vielleicht kannst du mal schreiben, wofür du das brauchst. Dann kann man vermutlich leichter einen brauchbaren Lösungsansatz erarbeiten.



  • klassenhierarchien sind mittel aber niemals zweck einer lösung. ausserdem ist hier in jedem falle der falsche ansatz, denn ein unsigned int IST KEIN int. du könntest nat. eine abstrakte klasse etwa integral_type nehmen und alles davon ableiten. allerdings bezweifle ich, dass das sinn macht. ohne zu wissen WAS du speichern willst, kann man da kaum etwas raten.



  • Number
    |
    +-Integral
    | |
    | +-Signed
    | | |
    | | +-Integer
    | | |
    | | +-Long
    | |
    | +-Unsigned
    |   |
    |   +-UInt
    |   |
    |   +-ULong
    |
    +-FloatingPoint
      |
      +-Single
      |
      +-Double
    

    Tja, hängt vom Anwendungsfall ab? 😕



  • Hallo,
    also ich habe eine Konfigurationsdatei in der

    IntValue1 123
    IntValue2 567
    BoolVale TRUE
    ...

    stehen kann. Wobei ein IntValue z.b. Int8 oder Int16 ist, das weiß ich aus anderen Quellen. Geht also eigentlich darum den Wertebereich nicht zu verletzen..
    Ausser den Int's sind noch andere (Bool, Arrays,..) von einer gemeinsamen Basisklasse abgeleitet und deswegen scheiden 2 Listen eigentlich aus.

    Gruß, Tom.



  • Das hört sich eher so an als solltest du ganz simpel beim einlesen deiner Konfigurationsdatei die Wertebereiche überprüfen. Wenn du die Werte dann unbedingt speichern musst bietet sich evtl. boost::any an.



  • Arrays? Was machst du? Einen Compiler bauen? 🙂
    Leider kann man deinen Angaben noch immer nicht viel entnehmen. Wie der Input aussieht ist ja nur die halbe Wahrheit, genauso wichtig ist aber auch, wie die Daten letztendlich verarbeitet werden.



  • Ok, versuche das mal zu erklären:

    ich "baue" oder versuche 🙂 eine Klassenbibliothek für eine Konfigurationsdatei zu bauen.
    Die Condigfiles funktionieren ähnlich wie ne Serialisierung...
    Ich kann damit zur Laufzeit von einer Klasse Objekte anlegen und dessen Membervariablen initialisieren. Die Configfiles sind aber normale, vom Menschen lesbare ASCII-files.

    Die Klassen die nun zur Laufzeit eingelesen werden, können Membervariablen vom Typ Int8, Int16,... UInt8,... , bool, string,... enthalten.
    Welche Variablentypen eine Klasse enthalten und somit auch welche eingelesen werden können wird in einer anderen Datei festgelegt und zur Laufzeit vor dem eigentlichen Parsen ausgewertet... (So ne art steuerbarer Parser...)
    Also wenn ich die eigentliche Datei Parse schaue ich in meiner "Steuerdatei" nach welcher Integertyp zu einem Namen gehört: ob Int8er, oder In16er... oder String oder..... bool

    Jetzt möchte ich, nachdem ich eine Configdatei eingeselen habe und diese im Speicher in meiner Datenstruktur halte manipulieren und wieder rausschreiben.
    beim Manipulieren oder Parsen der Configfiles möchte ich nur den Wertebereich der Integer überprüfen und ggf ne Aktion verwerfen, mehr nicht.



  • das Gleiche "problemchen" hätte ich auch bei Strings:
    gibt verschidene Stringtypen:
    1. können nur a..z enthalten,
    2. wie 1 + ein paar Sonderzeichen,
    3. auch leerzeichen (werden durch "" begrenzt)

    Dafür jemand auch ne Idee bezüglich der Strukturen?

    Thx, Tom



  • TomTom schrieb:

    Dafür jemand auch ne Idee bezüglich der Strukturen?

    Kannst du dich noch mal kurz etwas klarer bezüglich deiner Zielsetzung ausdrücken? 🙂
    Wird das jetzt eine Serialisierungslib? Oder wie anfangs behauptet so ne Art Konfig-Registry?
    Bei letzterem würde ich dir immer noch raten die ASCII-Daten gleich in die "richtigen" Datentypen zu konvertieren, schließlich willst du ja dann auch mit diesen arbeiten, oder?
    Einfach beim konvertieren auf die Wertebereiche achten, und am besten die Möglichkeit die zulässigen Werte nach Bedarf weiter einzuschränken.
    Dazu vielleicht auch ein Interface so dass du weitere Datentypen flexibel registrieren kannst.



  • Ok, ich versuche das jetzt so einfach wie möglich darzustellen:

    In einer ACSII Datei steht folgendes:

    Integer8Name1 1252
    Integer16Name2 1236587
    StringName1 "das ist ein string"
    StringName2 einfacher_string_ohne_leerzeichen
    BoolName1 FALSE
    BoolName2 true

    Jetzt möchte ich den Inhalt dieser Datei in einer Klassenstruktur speichern.
    Also ne Basisklasse für alle damit ich das in einer Liste speicher kann( es gibt auch noch mehr Datentypen deswegen kommt nur eine List in frage und nicht eine pro Datentyp)
    Die Integer können ausserdem verschiedene Wertebereiche haben. Int8, Int16,...UInt8, UInt16,..
    Ausgelesen wird die Datei mit einem von antlr generierten Lexer/Parser.
    Also sollte ich nur eine Intergerklasse machen und in dieser anhand einer Membervariablen den max gültigen Werteberiech beschreiben? Oder mehrere Integerklassen...
    Thx, Tom.



  • Ich mache jetzt einfach nur eine Integerklasse... Thx



  • TomTom schrieb:

    Ich mache jetzt einfach nur eine Integerklasse... Thx

    Zum dritten mal: wieso willst du überhaupt unbedingt ne Integerklasse?



  • Weil ich diese zusammen mit anderen Objekten wie Strings in einem Kontainer oder einer Liste speichern muß.
    Ausserdem gibt es ne Klasse "SimpleAttribute" die ausser einem Namen auch einen Attributwert wie integer, string, bool haben kann. Welcher es nun ist wird erst zur laufzeit entschieden...

    SimpleAttribute
    - Name
    - Value

    Also SimpleAttribute hat die Member Name und Value..

    Value
    |
    +-- MeinBool
    +-- MeinString
    +-- MeinInteger

    MeinBool, MeinString und MeinInteger erben von Value
    Wüßte nicht wie ich die beiden Kriterien mit einem simplen "int" lösen könnte...

    Gruß, Tom


Anmelden zum Antworten