1

GetQueuedCompletionStatus()的文档中,MSDN 说

这是通过为 OVERLAPPED 结构的 hEvent 成员指定一个有效的事件句柄并设置其低位来完成的。

假设事件是 HANDLE 类型,typedef 是 void *,我该如何使用 C++ 风格的强制转换来做到这一点?我不能直接将 |= 1 应用于指针,reinterpret_cast 仅在具有相同间接级别的类型之间转换,并且 static_cast 也不起作用。这样做的 C++ 方法是什么,避免 C 风格的转换并使用 C++ 风格的转换为 size_t?我知道另一种选择是使用联合,但这似乎比使用 C 样式强制转换更像是一种 hack。

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 回答