本文主要是介绍VC6下CreateThread的回调函数无法直接用函数模板生成,需要一层分装,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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);
这篇关于VC6下CreateThread的回调函数无法直接用函数模板生成,需要一层分装的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!