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?


  • Mod

    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?


Anmelden zum Antworten