这个WINAPI线程回调:
DWORD WINAPI dont_thread_on_me(LPVOID context) {
int value = *((int *)context);
return ERROR_SUCCESS;
}
特别是这一行:
int value = *((int *)context);
的工作原理。但*((int *)context)
是各种令人讨厌的。有没有更好的方法来写这个?
答案 0 :(得分:4)
int value = *reinterpret_cast<int *>(context);
如果需要,你无法真正解决这个事实。
答案 1 :(得分:3)
您可以使用reinterpret_cast
:
int value = *reinterpret_cast<int *>(context);
答案 2 :(得分:2)
编译器必须知道如何处理context
。所以你必须告诉编译器一个指向int
的强制转换。您可以使用像
#define read_as_int(p) *(reinterpret_cast<int*>(p))
int value = read_as_int(context);
但这并没有改善可读性和输入代码的努力。 C ++纯粹主义者可能更喜欢内联函数:
int inline read_as_function(void*p)
{
return *(reinterpret_cast<int*>(p));
}
答案 3 :(得分:1)
虽然问题标记为C ++,但它也完全有效作为C问题(而且我从来不知道人们是否准确标记问题),所以...
在C中,经常写着:
foo( void *v ) {
int *ip = v;
int x = *ip;
这种优雅还是类型系统中的漏洞是个人偏好的问题。