boost::bind zu member pointer to data (member variable)
-
Also anscheinend kann ich boost::bind dazu benutzen um auch zu einen member daten pointer zu "binden"
struct Foo { double member; }; Foo foo; boost::function<double(Foo&)> func = boost::bind(&Foo::member, _1); std::cout << func(foo);aber ich möchte jetzt nicht nur den Wert lesen, sondern auch setzen?
Geht das nicht mit boost::bind?
-
EDIT:
War quatsch.
-
// edit: bitte ignorieren!
bei boost::bind musst du bei zugriffen auf Methoden stets als 2. Argument das Objekt übergeben, auf dem die Methode aufgerufen werden soll.
-
Cyres schrieb:
bei boost::bind musst du bei zugriffen auf Methoden stets als 2. Argument das Objekt übergeben, auf dem die Methode aufgerufen werden soll.
Tut er doch. func(foo) -> foo.member. Ist übrigens das erste Argument.
-
LordJaxom schrieb:
Cyres schrieb:
bei boost::bind musst du bei zugriffen auf Methoden stets als 2. Argument das Objekt übergeben, auf dem die Methode aufgerufen werden soll.
Tut er doch. func(foo) -> foo.member. Ist übrigens das erste Argument.
Oh, stimmt, dann ignoriert bitte einfach mein Post (ist noch früh
)
-
Nash26 schrieb:
Also anscheinend kann ich boost::bind dazu benutzen um auch zu einen member daten pointer zu "binden"
struct Foo { double member; }; Foo foo; boost::function<double(Foo&)> func = boost::bind(&Foo::member, _1); std::cout << func(foo);aber ich möchte jetzt nicht nur den Wert lesen, sondern auch setzen?
Geht das nicht mit boost::bind?Wozu brauchst du das? Wenn du Getter/Setter verwendest, kannst du die dann ganz einfach binden; Vielleicht geht was du willst ja auch. Aber ob das so eine geniale Idee ist, wage ich zu bezweifeln.
Du kannst auch ein Lambda benutzen.
-
IMHO: Kapselung ist ne tolle Sache ... aber nicht immer sinnvoll. Manchmal reicht auch einfach eine "struct-Datensammlung".
-
Datenkapselung zu verwenden, dann schreib Getter/Setter.
Getter/Setter sind haesslich und haben kaum was mit Kapselung zu tun.
-
Gut, dann eben eine Datenstruktur. Aber wofür braucht er das?
-
boost::function<double&(Foo&)> func = std::mem_fn(&Foo::member);
-
camper schrieb:
boost::function<double&(Foo&)> func = std::mem_fn(&Foo::member);yeah, here we go.
Das ist genau das was ich haben wollte.
Aber warum geht das nur mit std::mem_fn?
Kenne ich gar nicht diese Klasse/methode.Das heißt std::mem:fn liefert auch nur so ein passendes Konstrukt für
<double&(Foo&)> zurück?