2016-04-30 3 views
0

Ist ein Objekt namens myObj mit den Funktionen doThis und doThat die beste Methode, um das Objekt (und die Anweisung an eine Funktion) an eine externe Funktion zu übergeben?Wie übergebe ich die Methode eines Objekts an eine externe Funktion?

Als Beispiel dafür, wie ich zur Zeit das tue ich eine externe Funktion void whatToDo(myClass myObj, string myFunction), wo ich einfach in entweder doThis oder doThat als myFunction passieren und es überprüfen:

void whatToDo(myClass myObj, string myFunction) { 
    if(myFunction == "doThis") myObj.doThis(); 
    if(myFunction == "doThat") myObj.doThat(); 
} 

Da jedoch die Klasse wächst, diese wird zu einer schlechteren und schlechteren Option. Gibt es eine Möglichkeit, die eigentliche Funktion an whatToDo zu übergeben, damit ich sie direkt aufrufen kann?

+1

Verwenden Pointer-To-Mitglied (Funktion):

void whatToDo(myClass& myObj, void (myClass::*p)()) { // p is a pointer to a member function class myClass that // takes no arguments and returns void // you can invoke it thusly (myObj.*p)(); } 

Sie solche Zeiger wie bieten könnte. – PcAF

+0

Werden Sie mit dem Objekt noch etwas anderes tun, als diese Methode aufzurufen? Werden Sie dieselbe Elementfunktion für andere Objekte verwenden? Wenn für beide kein Wert vorhanden ist, können Sie einfach ein Argument (einen Schablonenparameter) verwenden und ein Funktionsobjekt übergeben (entweder mit einem Lambda oder mit "std :: bind"). –

Antwort

4

Das ist, was auf Member-Funktionen Pointer sind für:

struct myClass { 
    void doThis(); 
    void doThat(); 
}; 

myClass c; 
whatToDo(c, &myClass::doThis); // will invoke c.doThis(); 
whatToDo(c, &myClass::doThat); // will invoke c.doThat(); 
Verwandte Themen