memberfunktion übergeben



  • hi,

    ich stehe wieder mal auf dem schlauch.

    ich will eine memberfunktion einer klasse an eine andere klasse übergeben. wie muss ich das deklarieren damit das funzt? bzw. wie übergebe ich dann letztlich die memberfunktion? irgendwie blicke ich das noch nicht.
    achso, ich befinde mich im kontext der klasse dessen memberfunktion ich übergeben will.

    danke euch 🙂

    gruß,
    basti



  • Hi,

    kannst du das bitte etwas genauer beschreiben, was du wie an wen übergeben willst?
    Und wozu?

    Ich verstehe gerade leider nicht, was du willst...



  • sowas wie

    class A{
    public:
       function();
       foobar();
    }
    
    class B{
    public:
       registerMember( void (*f)(void) );
    }
    
    //und dann in class a
    A::foobar(){
    b.registerMember(a.function);
    }
    


  • class A
    {
    public:
        void function();
        void foo();
    };
    
    typedef member_func void (A::*func)();
    class B
    {
    public:
        bool register_member(member_func);
    };
    

    ... so sollte das gehen ^^ aber guck dir mal mehr zu function pointer an 🙂



  • mmhh, kann man das nicht irgendwie unabhängig machen von A? also einfach nur sagen das man eine funktion übergibt die keinen param nimmt?

    edit: da gibts doch was feines...templates



  • Hm, wie genau das geht, weiß ich auch nicht, aber ich glaube du hast zwei Möglichkeiten:

    1. Eine statische Funktion übergeben
    2. Ein Objekt der Klasse erzeugen und die Funktion dann für dieses übergeben.

    Guck dir mal an, ob das hier hilft:
    http://www.informatik-forum.at/showthread.php?t=15545

    P.S.: Rückgabetyp nicht vergessen.
    P.P.S.: Semikolon am Ende der Klassendefinition.



  • Du bist immer abhängig von der Klasse weil du eine nicht-statische Funktion, also eine Member-Funktion nur in Verbindung mit einem Objekt der Klasse aufrufen kannst.



  • ne, da kam meine frage falsch rüber. mir ist klar das eine nicht-statische memberfunktion immer zu einer instanz(objekt) gehört. mir ging es darum die klasse bei der funktionsdeklaration wegzulassen. und dabei sollten dann templates helfen



  • Hallo

    C++ an sich unterstützt nur statische Funktionen und Membermethoden fester Klassen. Wenn du Membermethoden verschiedener Klassen als "Funktionspointer" haben willst, must du in der Tat mit Templates drumherumbauen. Im Boost-Package ist imo so etwas drin.

    bis bald
    akari



  • akari schrieb:

    Im Boost-Package ist imo so etwas drin.

    Im TR1 auch 😉

    boost::function oder std::tr1::function

    typedef function< void () > my_func;
    my_func func = bind( &A::function, objectOfA );
    


  • ConfusedGuy schrieb:

    ...mir ging es darum die klasse bei der funktionsdeklaration wegzulassen. und dabei sollten dann templates helfen

    Japp - ich glaube, ich habe verstanden, was Du willst. Das Problem könnte sein, dass Du mit templates eine Compilezeitbindung eingehst und keine Laufzeitbindung, wie Du sie evtl. willst.

    Wenn es Dir reicht, Dich zur Compilezeit festzulegen, kannst Du templates nehmen.
    Am Einfachsten sorgst Du dafür, dass die Funktion aller infrage kommenden Klassen denselben Namen hat...
    Ich fummel vielleicht noch mal an einem Beispiel - jetzt ist's gerade knapp an Zeit.

    Gruß,

    Simon2.


Log in to reply