www.mikrocontroller.net

Forum: PC-Programmierung C++ Variablen Container?


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
container->Set("variable_1", int, 1234);
container->Set("variable_2", string, "test");

int a;

a = container->variable_1;
// a == 1234

string b;
b = container->variable_2;
// 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?

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: F. Kriewitz (freddy436)
Datum:

Bewertung
0 lesenswert
nicht 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-functi...

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: andy (Gast)
Datum:

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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.