Ich versuche, etwas wie MsgProc
in Win32 zu erstellen. Wenn sie die MsgProc
Funktion erklären, haben sie den CALLBACK
Art vor ihm. Alles, was ich versuche, ist meine eigene Messages-Funktion, die meine Funktion aufruft, um die Nachrichten zu verarbeiten. Es ist im Grunde dasselbe, wenn Nachrichten gesendet und verarbeitet werden. Meine Frage ist, wie kann ich den gleichen Prozess erstellen ?. Ein Beispiel wäre großartig.C++ Callback Funktion Typ
3
A
Antwort
1
Außer den Klassikern Funktionspointer und Funktionsobjekten können Sie die neuen C++ 0x Lambdas interessieren.
Hier ist ein Beispiel für die Weitergabe eines Lambdas an eine Timerfunktion.
#include <windows.h>
#include <iostream>
#include <functional>
void onInterval(DWORD interval, std::function<void()> callback) {
for (;;) {
Sleep(interval);
callback();
}
}
int main() {
onInterval(1000, []() {std::cout<<"Tick! ";});
}
0
Wenn Sie in C++ sind, nur einen Funktionszeiger in Ihrer Klasse verwenden:
0
Wenn Sie Boost-verwenden können, ich auf jeden Fall Boost.Signals einen Schuss geben würde, bieten sie die Funktionalität, die Sie suchen sind für eine saubere und sichere Weise (Boost.Signals2 sogar in thread-safe Weise.)
CALLBACK ist ein Makro definiert als __stdcall. Es setzt die Aufrufkonvention des Callbacks auf die Win32-API. Das Implementieren eines Rückrufs in Ihrem eigenen Code erfordert dieses Makro nicht, wenn es sich nicht um die Windows-API handelt. –