2011-11-17 3 views
1

Je veux créer un objet fonctionnel qui pourrait être appelé plus tard (callback) construire à partir de un objet et une fonction membre de cet objet.créer un objet fonctionnel avec la méthode et l'objet

class A 
{ 
public: 

void AnyMethod() { cout << "Hello" << endl; } 
}; 

int main() 
{ 
    A a; 
    function<???>f1(&A::AnyFunc, &a); // ????? 

    ... 
    f1(); 
} 

Je suis un peu confus, car la création d'un fil est très simple:

thread t1 (&A::AnyFunc, &a); 
... 
t1.join(); 

Il est simple si je l'utilise avec une fonction lamba, mais cela est une surcharge de bits que je veux éviter.

function<void(void)> f2([&a](){ a.AnyFunc(); }); // works fine 

Peut-être qu'il existe un meilleur moyen d'obtenir un objet appelable?

+4

L'utilisation d'un lambda ne devrait pas ajouter de surcharge. En fait, l'objet std :: function ajoute probablement plus de préfixes que d'utiliser un lambda typé automatiquement. – bames53

+1

En effet - les lambdas sont beaucoup plus légers que 'bind', et' function <> 'aura plus de poids que l'un ou l'autre. – ildjarn

Répondre

2
std::function<void()> f1 = std::bind(&A::AnyMethod, &a); 
Questions connexes