Behandeln eines C ++ libsigc ++ - Signals mit einer Lambda-Funktion

8

Ich arbeite an C ++ - Code, der libsigc ++ für die Signalisierung (Eventing) verwendet.

Ich bin ziemlich neu in C ++ und denke in C #. Der entsprechende Code zu dem, was ich in C # möchte, wäre etwas wie:

%Vor%

Die libsigc ++ - Tutorials machen eine gute Arbeit, indem sie zeigen, wie man eine Funktion oder ein Mitglied an ein Signal bindet, aber ich möchte keine neue Methode auf Klassenebene für solch eine einfache Methode definieren, die wirklich privat in ihrem Client gekapselt werden sollte, zumindest für mein Denken.

Die libsigc ++ API scheint Lambda-Ausdrücke zu unterstützen, aber ich habe keine Beispiele gefunden, die zeigen, wie man sie benutzt. Kann mir jemand helfen? Denken Sie daran, dass ich ein C ++ Neuling bin!

    
Drew Noakes 13.05.2011, 15:19
quelle

3 Antworten

6

Lambdas sind nur Funktionsobjekte. Wo auch immer Sie einen beliebigen (also templated) Funktor verwenden können, können Sie ein Lambda verwenden.

Ich habe die Bibliothek nicht installiert, also kann ich das nicht testen, aber schaue auf dieses Beispiel , ich glaube, dass diese Änderung funktionieren sollte:

%Vor%

P.S.

Ich war nicht ganz überzeugt von dieser Antwort, da ich es nicht testen konnte. Ich habe diesen Konstruktor für die Slot-Klasse in der Dokumentation gefunden, und da ich noch nie eine Konstruktorvorlage in einer Klassenvorlage gefunden hatte, war ich nicht sicher, ob die Typen alle auflösen könnten. Jedenfalls habe ich einen Test geschrieben, der nur die Standard-Bibliothek verwendet, die so etwas wie das, was der Konstruktor tut, tut, und es funktioniert. Hier ist es

    
Benjamin Lindley 13.05.2011, 16:17
quelle
1

C ++ 0x unterstützt Lambdas und würde wahrscheinlich erlauben, dass Sie etwas tun, was dem ähnlich ist, was Sie tun C #. Siehe C ++ - Compiler unterstützen bereits Lambda? für C ++ 0x fertige Compiler.

    
joce 13.05.2011 16:21
quelle
0

Diese Seite auf MSDN hat eine sehr gut durchdachte und umfassende Darstellung der Lambda-Funktion sowie der Verwendung des auto -Schlüsselworts in C ++ 0x. Es hat einige sehr hilfreiche Beispiele, sowie die Verbindung zwischen Lambdas und Funktionsobjekten aus früheren Versionen von C ++. Beachten Sie, dass Sie möglicherweise die Flags -std=c++0x oder 1std=gnu++0x verwenden müssen, wenn Sie g ++ Version 4.4 oder höher verwenden, damit diese Features korrekt kompiliert werden können.

    
Jason 13.05.2011 16:19
quelle

Tags und Links