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:
alles, was Klasse A, Klasse B und Klasse C erlaubt, ClassX zu kennen didSomething () !!!
Danke
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:
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.
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ß.
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.
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).
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.
"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 ++.
Tags und Links c++ callback signals-slots