Wie definiere ich typabhängige Variablen innerhalb von Klassen?
-
Hallo zusammen,
ich möchte gerne in C++ (Visual Studio 2010) eine Klasse definieren, die je nach Typ mit unterschiedlichen Variablen zu füllen ist.
Beispiel:
TYP kann entweder "A" oder "B" sein.
Wenn TYP = "A", dann sollen die Variablen int x,y initialisiert werden.
Wenn TYP = "B", sollen die Variablen float f und std::string zeichenkette initialisiert werden.
Unabhängig von TYP: bool wahrheit und int ID.
Wohlgemerkt: alles in einer Klasse, bei der sich Elemente noch weitere Variablen teilen können.Frage: Wie gehe ich das am besten an?
Ich könnte natürlich für alle Typen alle Variablen initialisieren - und bei Nichtgebrauch ignorieren - aber das würde sicherlich auf Dauer den Speicher ziemlich in Mitleidenschaft bringen. (Wie) ist das eleganter und effizient möglich?
- Corak
-
Kannst Du nicht durch Vererbung die Typen spezifizieren?
-
Irgendwie so?
struct A; struct B; struct Base { bool truth; int ID; }; template<typename T> struct ActualClassTemplate; template<> struct ActualClassTemplate<A> : Base { int x = 0, // Falls das hier einen Fehler erzeugt, das = 0 weglassen und einen Default-Konstruktor schreiben y = 0; }; #include <string> template<> struct ActualClassTemplate<B> : Base { float f = 0; std::string string; };
-
@Helmut
Wie meinst Du das?@Arcoth
Das geht in die Richtung denke ich. Ehrlich gesagt habe ich bisher noch nicht mit struct gearbeitet, sondern mit class wann immer das möglich ist.
Ist denn mit struct auch ein Objekt definierbar, dem ich Funktionen hinzufügen kann? Oder soll struct nur die Variablenstruktur defineren und dann in eine Klasse eingebunden werden?Ich brauche von dem in meinem Beispiel skizzierten Objekt einen Vektor mit einigen tausend Elementen, die letztendlich per XML gefüllt werden.
-
Typen können durch Klassen definiert werden.
Nehme eine Basisklasse "X" mit den Methoden und Attributen welche die Typen "A" und "B" gemeinsam haben (wie ich Dich verstehe bool wahrheit und int ID).
Nun leitest Du von Klasse "X" die beiden Klassen "A" und "B" ab mit ihren jeweiligen eigenen Attributen.
-
structundclasssind bis auf Default-Sichtbarkeit identisch.