为什么函数会发生这种转换错误?

时间:2014-10-02 07:07:49

标签: c++ function templates callback type-conversion

我定义了一个定义类型的结构。

namespace ns
{
    template <typename T>
    struct StructureForType
    {
        typedef void (*TYPE)(Input<T>);
    };
};

在另一个文件中,我制作了这些功能。

namespace ns
{
    template <typename T1, typename T2, SomeClass<T1, T2> &someclass>
    void TheFunction(Input<T1> input)
    {
        someclass.DoSomething(input);
    }

    template <typename T1, typename T2>
    SomeClass<T1, T2>::SomeClass()
    {
        typename StructureForType<T1>::TYPE func = TheFunction<T1, T2, *this>;
        Input<T1>::SetSomeCallBackFunc(func);
    }

};

然后在这一行发生错误:

StructureForType<T1>::TYPE func = TheFunction<T1, T2, *this>;
  

错误C2440'重载函数'到'void(__ cdecl *)(ns :: Input)'

我该怎么办?


原始代码

template <typename T>
struct CBDestroyHandleType
{
    typedef void (*TYPE)(CHandle<T> handle);
};


template <typename TAG, typename DATA, CHandleMgr<TAG, DATA> &handleMgr>
void AdaptedDestroyHandle(CHandle<TAG> handle)
{
    handleMgr.CBDestroyHandle(handle);
}


template <typename TAG, typename DATA>
CHandleMgr<TAG, DATA>::CHandleMgr()
{
    CBDestroyHandleType<TAG>::TYPE cbFunc = AdaptedDestroyHandle<TAG, DATA, *this>;
    CHandle<TAG>::SetCBDestroyHandle(cbFunc);
}

此行中的错误:CBDestroyHandleType :: TYPE cbFunc = AdaptedDestroyHandle;

错误C2440:'初始化':无法从'void(__ cdecl *)(res :: CHandle)'转换为'void(__ cdecl *)(res :: CHandle)'

0 个答案:

没有答案