In c ++ gibt es irgendwelche Events / delegates / interfaces / notifications! etwas?

7

Sagen Sie, ich habe diese Klassen ViewA und ViewB

In Ziel C mit dem Delegatenmuster konnte ich

machen %Vor%

dann in der ViewB-Schnittstelle:

%Vor%

Dann in der ViewA-Implementierung setze ich den Delegaten:

%Vor%

und jetzt kann ich doSomething von viewB auf irgendeinen Delegierten dieses unbekannten Typs aufrufen.

%Vor%

"C ++ - Wie man programmiert" ist das schlechteste Lesen gewesen und kann einfache Beispiele nicht finden, die grundlegende Entwurfsmuster zeigen.

Was ich in C ++ suche ist:

  • Ereignisse ActionScript und Java
  • oder Delegaten oder NSNotifications in Objective C

alles, was Klasse A, Klasse B und Klasse C erlaubt, ClassX zu kennen didSomething () !!!

Danke

    
Bach 13.06.2010, 09:00
quelle

7 Antworten

9

Wenn ich Sie wäre, würde ich Funktionszeiger nicht verwenden, um diese Aufgabe zu erfüllen. Überlasse diese Option den Gurus;)

In Boost gibt es eine schöne Bibliothek namens Signale . Es macht dein Leben einfacher! Dies ist ein Anwendungsbeispiel:

%Vor%

Dies wird gedruckt:

%Vor%

So funktioniert es.

Zuerst deklarieren Sie den Ort, an dem die Delegierten sitzen:

%Vor%

Dann verbinden Sie es mit jeder Gruppe von Funktionen / Funktoren / aufrufbaren Dingen, die Sie aufrufen möchten.

%Vor%

Beachten Sie, dass ich bind verwendet habe. Also, dass die Art der Funktionen in der Liste der Aktionen identisch ist, aber wir können sie mit verschiedenen Arten von Klassen verbinden. Also:

%Vor%

Diese Sache erzeugt eine aufrufbare Sache vom Typ void () , da wir den Typ von list_of actions früher deklariert haben. Natürlich geben Sie im zweiten Parameter die Instanz an, auf die Sie diese Memberfunktion anwenden möchten.

Wenn Sie Multi-Thread-Sachen machen, dann verwenden Sie die Schwester signals2 .

Ich hoffe, das hilft.

    
AraK 13.06.2010, 09:20
quelle
5
  

alles, was Klasse A, Klasse B erlaubt   und Klasse C, um diese Klasse zu kennen   didSomething () !!!

Wahrscheinlich suchen Sie nach Signalen & amp; Slots , die mehrere Implementierungen haben:

Ich bin sicher, dass es mehr gibt, aber diese sind die wichtigsten, von denen ich weiß.

    
sml 13.06.2010 09:14
quelle
2

Es gibt keine Delegierten / Ereignisse / etc.

Sie können Schnittstellen mit der reinen virtuellen Funktion simulieren, siehe hier für eine ähnliche Frage.

Und da sind die Funktionszeiger ...

Im Grunde ist die Antwort auf Ihre Frage nein, es gibt nichts davon in C ++ (weiß nicht über den neuesten Standard), aber es gibt Ersatz- und Umgehungslösungen.

    
Unknown 13.06.2010 09:04
quelle
2

Persönlich mag ich Die unglaublich schnellen C ++ Delegierten von Sergey Ryazanov. Sehr einfache und benutzerfreundliche Implementierung, die angeblich schneller ist als Boost::function .

Sie können auch dort implementierte Ereignisse finden. Ich benutze sie jedoch nicht. Ich implementierte meine eigene Ereignisbehandlung mit .NET-Stil (Absender, Argumente).

    
Aoi Karasu 13.06.2010 09:23
quelle
1

Weder die C ++ - Sprache noch die zugehörige Standardbibliothek verfügen über Delegaten oder Ereignisse. Es gibt natürlich viele Bibliotheken, die solche Dinge implementieren, oder Sie können sie selbst implementieren.

    
anon 13.06.2010 09:05
quelle
1

Alles, was ich weiß, ist eine Methode namens Callback Methode (In der Tat Funktionszeiger ).

Delegation? Es ist nur eine Art umbrochener Callback-Methode, und sieht fortgeschritten aus

    
rhapsodyn 13.06.2010 09:05
quelle
1
  

"C ++ - Wie man programmiert" war das schlechteste Lesen und kann keine einfachen Beispiele finden, die grundlegende Entwurfsmuster demonstrieren

Ich denke, das ursprüngliche Design Patterns-Buch enthält Beispiele zur Implementierung jedes Musters mit C ++.

    
ChrisW 13.06.2010 09:22
quelle

Tags und Links