Variable Varibalen
-
Hi Leute,
ist es möglich Variable Varibalen in C++ zu nutzen.
Beispiel:
statt
class CHuman { string sFirstname, sLastname; public:void mSetFirstname(string pFirstname) { sFirstname = pFirstname; } public:void mSetLastname(string pLastname) { sLastname = pLastname; } string mGetFirstname() { return sFirstname; } string mGetLastname() { return sFirstname; } };nur noch
class CHuman { string sName, sValue; public:void mSet(string pName , string pValue) { /* genau hier liegt meine Frage der Inhalt von [i]pName[/i] wird die neue Variable der Inhalt von [i]pValue[/i] wird der Inhalt von pName Inhalt hört sich bescheuert an :) */ [b]pName = pValue;[/b] } string mGet( string pName ) { return [b]pName[/b]; } };Selbstverständlich kann das wie gezeigt nicht gehen aber ich komme ursprünglich aus der PHP Gegend und bin sozusagen verwöhnt von einfachen Regeln im umgang mit Variablen.
Baue momentan einige Scripte in "richtige" Source um.
Vorab danke für die Hilfe
Eric
-
Nein, das ist mit C++-Bordmittel nicht möglich, da die Variablennamen im compilierten Programm nicht mehr existieren. Usus ist es für jede Variable eine get- und eine set-Methode zu schreiben.
Benötigst du unbedingt diese Funktionalität musst du eine Map schreiben die als Key einen String (den Variablennamen) und als Value einen Pointer (die Variable) hat. Ist aber ziemlich umständlich um auf Variablen zuzugreifen, wenns nicht unbedingt nötig ist.
MfG SideWinder
-
Danke für die Antwort.
Eigendlich will ich die ganze Sache nur sehr flexibel lassen.
Ich möcht zur Zeitpunkt des Compilierens nur gewisse Rahmen festlegen die ich zur Laufzeit mit n* Werten füllen kann.
Hatte mir das evtl so vorgestellt:
Ein Array hällt mir die Werte. Jeder Indize ist ein Pointer auf eine "allgemeine " Klasse die nicht anderes wie Variablenhandling für mich übernimmt.
Diese ermöglicht mir z.B. rudimentäre Prüffunktionen usw.Da mein Wissen über die Features von C++ noch in den Kinderschuhen steckt, suche ich nach einer "eleganten" Lösung dafür.
Eric
-
Also für all deine Anforderungen hast du imho die komplett falsche Sprache erwischt. Da wäre Java oder C# viel geeigneter, die hätten im Gegensatz zu C++:
- Meta-Informationen wie Variablennamen, etc. zur Laufzeit
- "Allgemeine Klasse" (Basisklasse) von der alle Klassen ableiten (+ Diese Klasse hat bereits erste rudimentäre Methoden)In C++ musst du all das selbst schreiben, du programmierst eben anders. Im Gegensatz zu PHP hast du keine Plattform zwischen OS und deinem Programm. Willst du deine PHP-Scripte möglichst 1:1 in eine Hochsprache übersetzen sind Programmiersprachen mit Plattform drunter geeigneter (Da bieten sich dann eben Java und C# an).
MfG SideWinder
-
In C++ musst du all das selbst schreiben
Wunderbar
genau das will ich ja 
Werd mal mit deiner Idee
Benötigst du unbedingt diese Funktionalität musst du eine Map schreiben die als Key einen String (den Variablennamen) und als Value einen Pointer (die Variable) hat.
etwas experimentieren.
Danke für die Hilfe
Eric
-
Ich denke gemeint war, dass man so nicht in C++ programmiert. C++ hat ein schönes statisches Typsystem, das Aussehen eines Typs steht zur Compilezeit fest und daran fummelt man dann nicht mehr zur Laufzeit rum. Wenn du neue Funktionalität brauchst, dann kennst du diese meist vorher, schreibst eine neue Klasse, leitest diese von der alten ab (zumindest in diesem Fall wäre das sinnvoll) und erhältst dadurch einen neuen, vollständigen Typ, bei dem sich der Nutzer nicht auf Überraschungen einstellen muss.
btw, das C-Präfix für Klassen ist nicht schön, genauso wie das m-Präfix für öffentliche Member. Beides sollte implizit aus dem Code zu lesen sein.
-
Ich weiß nicht, ob das wirklich funktioniert (nie praktisch ausprobiert) und für dich geeignet ist, aber eventuell kannst du Pointer-to-Member verwenden:
class CHuman { public: void Set(CHuman::string* var,const string& value) { *(this->var)=value; } string Get(CHuman::string*) { return *(this->var); } private: string FirstName,LastName,Street,City; }; CHuman ich; ich.Set(&CHuman::LastName,"Stoll");