1

GetQueuedCompletionStatus()のドキュメントで、MSDN は言う

これは、OVERLAPPED 構造体の hEvent メンバーに有効なイベント ハンドルを指定し、その下位ビットを設定することによって行われます。

イベントが void * の typedef である HANDLE 型の場合、C++ スタイルのキャストでこれを行うにはどうすればよいですか? |= 1 をポインターに直接適用することはできません。reinterpret_cast は、同じレベルの間接性を持つ型間でのみ変換し、static_cast も機能しません。これを行うC++の方法は何ですか?Cスタイルのキャストを避け、C++スタイルのキャストを使用してsize_tに変換しますか? 別の方法としてユニオンを使用することは知っていますが、それは C スタイルのキャストを使用するよりもハックのようです。

4

1 に答える 1

4

reinterpret_cast が必要です:

OVERLAPPED MyOverlapped;
// ...

MyOverlapped.hEvent = GetEvent();  // replace with whatever O/S call that is provided the event handle
ASSERT((reinterpret_cast<uintptr_t>(MyOverlapped.hEvent) & 0x1) == 0x0);  // if lsbit is a flag, then OS source of hEvent better NOT have it INITIALLY set!
reinterpret_cast<uintptr_t &>(MyOverlapped.hEvent) |= 0x1;
// ...
GetQueuedCompletionStatus(..., &MyOverlapped, ...);
于 2013-09-10T00:50:37.793 に答える