2017-07-18 2 views
-1

Ceci est défini en tant que membre public d'une classe.Comment transmettre un signal boost à une fonction à utiliser ailleurs?

boost::signals2::signal<void (int, std::string, std::string, int)> sigApp; 

Vous voulez passer le signal comme celui-ci: -

Application* newApp = new Application(pSn, &mdCache_, &sigApp); 

Son utilisation: -

(*sigApp)(Msg.getAsInt(var), var2, var3, var4); //Signal Used 

Le programme se ferme ici pendant l'exécution. Comment devrais-je transmettre un signal boost à une fonction?

Merci

Répondre

0

Vous n'êtes pas censé passer un signal, vous devraient « se connecter » un certain rappel (s) pour appeler lorsque le signal est soulevé. Par exemple:

boost::signals2::signal< void(int, std::string, std::string, int) > sigApp; 

sigApp.connect([](int a, std::string b, std::string c, int d) 
{ 
    // do something 
}); 

sigApp.connect([](int a, std::string b, std::string c, int d) 
{ 
    // do another thing 
}); 

// raise the event 
sigApp(1, "b", "c", 2); 

Vous êtes prêt.

+0

Il est lié à une méthode, juste que le signal est élevé dans une classe/méthode différente de celle où il est défini. –

+0

@DarkKnight puis passez l'objet qui contient le signal et exposer une référence à ce signal afin que vous puissiez connecter des rappels ailleurs. Ce n'est probablement pas une bonne idée de passer votre signal nu pour que tout le monde puisse le soulever. –