Forum: PC-Programmierung C++ Variablen Container?


von Peter (Gast)


Lesenswert?

Hallo,

ich bin auf der suche nach einem Container Objekt um dort dynamische 
Variablen mit verschiedenen Datentypen zu speichern.

Hier ein Beispiel wie ich mir das im groben vorstelle.
1
container->Set("variable_1", int, 1234);
2
container->Set("variable_2", string, "test");
3
4
int a;
5
6
a = container->variable_1;
7
// a == 1234
8
9
string b;
10
b = container->variable_2;
11
// b == test

Beim Suchen bin ich auf die map Funktion gestoßen, aber da ist das 
Problem das ich für jeden Datentyp eine eigene Liste/Objekt brauche.

Wichtig ist das alle Variablen(typen) im selben Objekt abgelegt werden 
und anschließend über ein einheitlichen Operator/Funktion abgeruffen 
werden können, wie ist relativ egal, z.B. container['variable_1'] oder 
auch container->Get("variable_1") wäre ok.

Ist es überhaupt möglich eine Funktion verschiedene Datentypen 
zurückzugeben lassen?

von Arc N. (arc)


Lesenswert?


von F. K. (freddy436)


Lesenswert?

Ich stand mal vor einem ähnlichem Problem (die Rückgabe verschiedener 
Datentypen).

hier ist eine Lösung des Problems:
http://init.ca/blog/2007/07/27/overload-cpp-functions-based-on-return-type/

von Rolf Magnus (Gast)


Lesenswert?

> Wichtig ist das alle Variablen(typen) im selben Objekt abgelegt werden
> und anschließend über ein einheitlichen Operator/Funktion abgeruffen
> werden können,

Was heißt "einheitlichen"? Es gibt variant-Typen oder sowas wie 
boost::any.

> wie ist relativ egal, z.B. container['variable_1'] oder
> auch container->Get("variable_1") wäre ok.

Woher soll der Compiler da denn wissen, als welchen Typ er es 
extrahieren soll?

> Ist es überhaupt möglich eine Funktion verschiedene Datentypen
> zurückzugeben lassen?

Mit Templates geht das, aber der Typ muß natürlich zur Compilezeit 
feststehen. Wenn du's dynamischer brauchst, mußt du mit Polymorphie 
arbeiten.

von andy (Gast)


Lesenswert?

oh menno das ist domain von dynamischen sprachen
dafür sind sie auch da!

aber nun gut, man kann auch was hacken
was wäre mit einer abstrakten class object,
mit virtuallen funktionen get/set.
davon leitest du intobject, strobject ...
und als container nimmst du dann
std::map<std::string, object> m;
m["var1"] = new strobject("stringvalue");
m["var2"] = new intobject(123);

std::string tmp = m["var1"].get();

ausm kopf gehackt :)

grüsse

von andy (Gast)


Lesenswert?

pardon schon spät ..
std::map<std::string, object *> m;

von Rolf Magnus (Gast)


Lesenswert?

> aber nun gut, man kann auch was hacken
> was wäre mit einer abstrakten class object,
> mit virtuallen funktionen get/set.

Preisfrage: Was liefert get zurück, bzw. was wird an set übergeben?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.