问题描述
需要不用C++11实现自己的函数对象类和bind方法,只需要绑定两个参数的类成员函数。
问题出现的环境背景及自己尝试过哪些方法
尝试通过下面的代码实现,但是编译报错。
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
#pragma once
namespace utils
{
template<class>
class CFunction;
template<class TRet, class Arg1, class Arg2>
class CFunction<TRet(Arg1, Arg2)>
{
public:
typedef TRet (*FuncPtr) (void*, Arg1, Arg2);
void* m_pObj;
FuncPtr m_FuncPtr;
TRet operator()(Arg1 arg1, Arg2 arg2)
{
return m_FuncPtr(arg1, arg2);
}
template <class TObj, TRet (TObj::*TMemFunc)(Arg1, Arg2)>
static CFunction Create(TObj* pObj)
{
CFunction Ret;
Ret.m_pObj = (void*)pObj;
Ret.m_FuncPtr = &Caller<TObj, TMemFunc>;
return Ret;
}
private:
template<class TObj, TRet (TObj::*TMemFunc)(Arg1, Arg2)>
static TRet Caller(void* obj, Arg1 arg1, Arg2 arg2)
{
TObj* pObj = static_cast<TObj*>(obj);
return (pObj->*TMemFunc)(arg1, arg2);
}
};
template<class TRet, class TClass, class Arg1, class Arg2>
CFunction<TRet(Arg1, Arg2)> Bind(TRet (TClass::*func)(Arg1, Arg2), TClass *pObj)
{
return CFunction<TRet(Arg1, Arg2)>::Create<TClass, func>();
}
} //end of utils
你期待的结果是什么?实际看到的错误信息又是什么?
编译报错:
Functional.h: In function ‘utils::CFunction<TRet(Arg1, Arg2)> utils::Bind(TRet (TClass::)(Arg1, Arg2), TClass)’:
Functional.h:48: error: expected primary-expression before ‘,’ token
Functional.h:48: error: expected primary-expression before ‘)’ token
求问如何修改