我定义了一个定义类型的结构。
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)'