私は、コマンドラインアプリケーション用に次のコード(サンプル)を用意しています。 Disconnectが呼び出されたことを確認したいと思います。ctrl + cイベントです。 そのため、ハンドラを追加しました。 CTRL +Cが押されたときに、ハンドラが上Disconnect()
を呼び出すための有効なFoo
を目的としているように、 私は、CtrlHandlerにメンバ関数を作るだろうか?メンバ関数をSetConsoleCtrlHandler()に渡す方法は?
#include <windows.h>
class Foo
{
public :
Foo()
{
Connect();
}
virtual ~Foo()
{
Disconnect();
}
protected:
Run();
Connect();
Disconnect();
};
BOOL CtrlHandler(DWORD fdwCtrlType)
{
switch (fdwCtrlType)
{
// Handle the CTRL-C signal.
case CTRL_C_EVENT:
//Disconnect somehow
return(TRUE);
default:
return FALSE;
}
}
int main(int argc, char* argv[])
{
SetConsoleCtrlHandler((PHANDLER_ROUTINE) CtrlHandler, TRUE);
Foo myFoo;
myFoo.Run();
}
いいえ「CtrlHandler」をメンバー関数にすることはできません。メンバ関数は非メンバ関数と同じではなく、メンバ関数は呼び出すクラスの*インスタンス*を必要とします。 ['SetConsoleCtrlHandler'](https://msdn.microsoft.com/en-us/library/windows/desktop/ms686016(v = vs.85).aspx)関数は単にインスタンスまたは他のユーザーを提供する方法がありません-データ。 SetConsoleCtrlHandler'に 'static'メンバ関数またはキャプチャレスラムダを渡すことができますが、それはあなたがしたいことを本当に助けません。 –