2017-07-18 3 views
-1

Dies ist definiert als ein öffentliches Mitglied einer Klasse.Wie gebe ich das Boost-Signal an eine Funktion weiter, die irgendwo anders verwendet werden kann?

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

Möchten Sie das Signal so zu übergeben: -

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

es verwenden: -

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

Das Programm beendet sich hier während der Laufzeit. Wie soll ich Boost-Signal an eine Funktion übergeben?

Dank

Antwort

0

Sie soll keine signal passieren, werden Sie erwartet, dass einige Rückruf „connect“ (s) aufzurufen, wenn das Signal angehoben ist. Zum Beispiel:

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); 

Sie sind alle eingestellt.

+0

Es ist an eine Methode binden, nur dass das Signal in einer anderen Klasse/Methode ausgelöst wird als dort definiert ist. –

+0

@DarkKnight übergeben Sie dann das Objekt, das das Signal enthält, und geben Sie einen Verweis auf dieses Signal frei, sodass Sie Rückrufe an anderer Stelle verbinden können. Es ist wahrscheinlich keine gute Idee, Ihr nacktes Signal zu übergeben, damit jeder es erheben kann. –

Verwandte Themen