CreateThread的回调函数格式为:DWORD WINAPI XXX(LPVOID lpv)
使用示例:
DWORD WINAPI CB(LPVOID lpv)
{
return 0;
}
CreateThread(NULL, NULL, CB, NULL, NULL, NULL);
当把CB更改为模板函数时,会发生错误:
error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)'
None of the functions with this name in scope match the target type
template<typename TType> DWORD WINAPI TCB(LPVOID lpv)
{
return 0;
}
CreateThread(NULL, NULL, TCB<SomeType>, NULL, NULL, NULL);
解决办法是为TCB添加一层封装:
template<typename TType> class TCB
{
public:
static DWORD WINAPI Function(LPVOID lpv)
{
return 0;
}
};
CreateThread(NULL, NULL, TCB<SomeType>::Function, NULL, NULL, NULL);