VC6下CreateThread的回调函数无法直接用函数模板生成,需要一层分装

来源:互联网 发布:淘宝双方已评 不显示 编辑:程序博客网 时间:2024/04/28 16:06

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);

原创粉丝点击