2017-03-10 6 views
1

Ich habe eine Klasse mit einem Array innerhalb. Innerhalb dieses Arrays möchte ich einen Funktionszeiger auf eine Funktion setzen, die den gleichen Zeiger hat wie ich.C++ Zeiger auf Klassenelement des Objekts

class Foo { 
    std::vector <void (*baz)> bar; 
    void baz() {}; 
} 

Foo bundy; 
bundy.bar.push_back (/*???*/); 

Wie kann dies geschehen? Ich nehme an, wenn ich es wie &Foo::baz() laufen lasse, hat baz keinen (gültigen) Zeiger oder zeigt nicht auf die Instanz.

Was könnte eine gute Problemumgehung sein?

Antwort

4

Anstatt einen Zeiger auf *baz zu speichern, können Sie einen std::function<void()> speichern.

Dann könnten Sie ein Lambda mit einer gebundenen Instanz speichern:

Foo bundy; 
bundy.bar.push_back([&bundy](){ bundy.baz(); }); 

Ihre Klasse würde dann wie folgt aussehen:

class Foo { 
    public: 
    std::vector<std::function<void()>> bar; 
    void baz() {}; 
}; 
+0

was ist ein Lambda? Danke für die Antwort;) – ThefrenchSpeedruns

+0

@ThefrenchSpeedruns http://en.cppreference.com/w/cpp/language/lambda – Ceros

+0

@Ceros Vielen Dank;) – ThefrenchSpeedruns