2011-01-08 10 views
0

Ich kann und würde gerne boost oder std dafür verwenden. Entschuldigung - Ich bin neu in C++. Also habe ich ein wirklich einfaches Programm wie: „Übermensch gestanzt“Wie können Ereignislistener/-signale zu einer einfachen Superman-Klasse hinzugefügt werden?

#include <iostream> 
#include <string> 
using namespace std; 

class superman 
{ 
public: 
    void punch(){cout << "superman: I hit the bad guy!" << endl;}; 
}; 

int main() 
{ 
    superman clark; 
    clark.punch(); 
    cin.get(); 
} 

Ich möchte ein Ereignis listner hinzufügen, die mir sagen würde, wenn clark gestanzt und cout etwas ähnliches. Wie fügt man meiner Klasse eine solche Ereignisliste und Ereignisfunktion hinzu?

+0

'cout << "Übermenschen: ich traf den Bösewicht!" << endl; 'gibt keine' std :: string' zurück. Welchen Compiler benutzen Sie? – Mahesh

Antwort

3

Sie boost::signal für die

verwenden, können Sie eine Klasse deklarieren und ihre Betreiber überlasten() nach uoi die Klasse auf das Signal zu binden, durch eine Verbindung() -Methode, und schließlich Nutzung Betreiber() des Signals

struct HelloWorld 
{ 
    void operator()() const 
    { 
    std::cout << "Hello, World!" << std::endl; 
    } 
}; 

// ... 

// Signal with no arguments and a void return value 
boost::signal<void()> sig; 

// Connect a HelloWorld slot 
HelloWorld hello; 
sig.connect(hello); 

// Call all of the slots 
sig(); 

für die Verwendung von Parametern in Schlitz:

void print_sum(float x, float y) 
{ 
    std::cout << "The sum is " << x+y << std::endl; 
} 

boost::signal<void (float, float)> sig; 

sig.connect(&print_sum); 

sig(5, 3); 
+0

Ich verstehe, dass es über Signale getan werden soll Ich sehe einfach nicht, wie es geht = ( – Rella

+0

Sie haben das Tutorial zu sehen? Es ist zu erklären, – kinnou02

+0

Ich habe das Beispiel hinzufügen, mit wenigen Kommentar – kinnou02

Verwandte Themen