J'ai un gestionnaire de classe et une classe de base (avec des sous-classes dérivées de Base, disons A: public Base). Inside Manager Je crée la bonne sous-classe de Base, mais Base ignore l'existence de Manager. Je voulais passer dans cette sous-classe créée de Base un objet fonction lié à une méthode membre de la classe Manager pour l'objet A à invoquer. En d'autres termes lors de la création, il serait quelque chose comme ceci:Lier les arguments pour fonctionner en deux étapes en C++?
void Manager::createThing()
{
FunctionObject func;
if (doExtraWork)
func.bind(&Manager::someMethod, this);
Base *bla = new A(func);
}
puis à l'intérieur de A, je voudrais être en mesure de détecter si nous avons un travail supplémentaire pour avoir le report Manager sur nous et faisons, quelque chose comme :
A::update()
{
if (func) //ideally detect if func was bound to someMethod or func is empty
func(this); //equivalent to the above instance of manager calling someMethod on this instance of A
//do regular stuff after;
}
Comment puis-je faire cela (probablement avec la fonction boost ou quelque chose comme ça)?
merci réponse impressionnante ... Je vais penser à la chose de délégué .. comme pour la façon de lier .. est-il un moyen pour le conditionnel à l'intérieur de A :: update() pour détecter qu'il est boost :: bind a été lié ou non? Ce serait plus agréable que de passer un pointeur sur une fonction boost :: qui pourrait être nulle (comme je devrais utiliser new) ou une méthode factice factice dans Manager lié à la fonction boost :: –
Lorsque vous évaluez un ' boost :: function' en tant que bool, c'est vrai s 'il a été réglé sur une fonction. Autrement dit, 'if (f) f();' fonctionne comme vous le souhaitez. –
belle merci! –