0

这个 WINAPI 线程回调:

DWORD WINAPI dont_thread_on_me(LPVOID context) {
    int value = *((int *)context);
    return ERROR_SUCCESS;
}

特别是这一行:

    int value = *((int *)context);

作品。但是*((int *)context)各种恶心。有没有更好的写法?

4

4 回答 4

4
int value = *reinterpret_cast<int *>(context);

如果需要的话,你无法真正绕过有演员表的事实。

于 2013-09-25T16:32:58.123 回答
3

你可以使用reinterpret_cast

int value = *reinterpret_cast<int *>(context);
于 2013-09-25T16:32:57.317 回答
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));
}
于 2013-09-25T16:35:57.337 回答
1

虽然这个问题被标记为 C++,但它作为一个 C 问题也是完全有效的(我永远无法判断人们是否准确地标记了问题),所以......

在 C 中,它经常这样写:

foo( void *v ) {
  int *ip = v;
  int x = *ip;

这是优雅的还是类型系统中的一个大洞是个人喜好的问题。

于 2013-09-25T16:37:48.127 回答