C++ - Ersatz für Delphis "Property read write"
-
Hallo,
gibt es unter C++ einen "Ersatz" für Implementationnen von Klasseneigenschaften unter Delphi mittels "Property read write"?
Unter Delphi habe ich
TObj = class private FVar : Integer; function GetVar : Integer; procedure SetVar(const Value : Integer); public property Var : Integer read GetVar write SetVar; end;Unter C++ sehe ich mich im Moment gezwungen für jede Eigenschaft 2 Zugriffsmethoden public zu definieren und kann auf ein Member damit auch nicht per Namen lesend und schreibend zugreifen (also nur über die getter/setter)
Gibt es da unter C++ keine Entschprechung für,
oder finde ich Sie einfach nur nicht ?Hoffe auf Antwort.
Gruß
FXMaveric
-
Hmm...soweit ich weiß gibt es da kein Konstrukt für.Aber man könnte das über einen umweg mit enums machen.
das man dann sowas hier kriegt.template<class T> T funktion(T wert,Enum lesen_schreiben)//Das enum ist dann nur dafür da, ob man lesen will oder schreiben will { if(lesen_schreiben == lesen) { return get_Wert_ausKlasse(); } set_Wert_inKlasse(wert); }Ist jetzt zwar nicht schön, weil man dann wieder mit den Settern und gettern arbeiten muss, aber funktionieren sollte es.
-
Es ist keine wunderschöne Version, weil man immer einen Wert an die Funktion übergeben muss, aber ist ne möglichkeit, ansonsten solltest du ruhig die getter und setter verwenden.
#include<iostream> template<class T> class test { private: T wert; public: T getwert() { return wert; } void setwert(T wert) { this->wert = wert; } }; enum ClassOption { Lesen, Schreiben, }; template<class T> T funktion(const T& wert,ClassOption options,const test<T>& testobjekt) { if(options == Lesen) { return testobjekt.getwert(); } testobjekt.setwert(wert); } int main() { test<int> testen; testen.setwert(100); std::cout<<funktion(0,Lesen,testen)<<std::endl; funktion(200,Schreiben,testen); std::cout<<funktion(0,Lesen,testen); }
-
Es gibt keine Standardlösung dafür. Microsoft bietet aber mit Visual C++ (wohl gemerkt, die Lösung funktioniert _nicht_ mit anderen Compilern) an:
class foo { public: void SetValue( int value ) { x = value; } int GetValue() const { return x; } __declspec( property( get = GetValue, put = SetValue ) ) int Value; private: int x; }; int main() { foo bar; bar.Value = 10; }
-
Vielen Danke erst mal für die schnellen und erschöpfenden Antworten.
Ich habe schon befürchtet, das es keine "einfache" Lösung gibt.Ich denke ich werde mich dann mit den gettern und settern anfreunden müssen.

Danke.
FXMaveric
-