J'ai un problème maintenant. J'essaie d'encapsuler boost :: signal et boost :: bind dans ma propre classe Event.Encapsulation boost :: signal et boost :: bind
class MyEvent
{
private:
boost::signal<void()> Sig;
public:
void Subscribe(.........)
{
Sig.connect(boost:bind(.........);
}
void Raise()
{
Sig();
}
};
j'essayer de passer le pointeur de fonction dans la signature de la fonction Inscrivez-vous et visual studio me donne juste des tons d'erreurs. Je ne sais pas comment écrire la signature de Subscribe et What pour passer dans boost :: bind, idéalement, je vais avoir boost::bind(&MyClass::MyHandler, &MyClassObject)
dans la fonction Subscribe et l'appeler à l'extérieur comme MyEventObject.Subscribe(&MyClass::MyHandler, &MyClass)
. Est-ce que des personnes peuvent m'aider à remplir ces deux espaces?
Merci Igor. Mon patron me demande de l'encapsuler afin d'éviter de booster partout. Je veux vraiment l'exposer car il est plus flexible d'utiliser boost :: signal – cynric4sure
@ cynric4sure Vous voulez dire que vous devez éliminer le boost des interfaces? Ensuite, faites attention aux points suivants: 1) votre classe expose toujours 'boost :: signals' dans sa définition (bien que ce soit' private') et donc le code de l'utilisateur dépendra des en-têtes boost. Vous pourriez vouloir le cacher au moyen de pImpl; 2) Vous n'avez pas à limiter l'utilisateur avec un pointeur vers la fonction membre! Au lieu de cela, acceptez tout appelable et laissez l'utilisateur le créer avec 'std :: bind' ou ce qu'il veut. –