#include<iostream>
#include<iomanip>
using namespace std;
template<typename ReturnType, typename ClassType, typename ParamType>
class CFunctionCall{
public:
CFunctionCall(ReturnType (ClassType::*lpfn)(ParamType), const ClassType& obj){LPFN = lpfn; OBJ = obj;}
ReturnType operator()(ParamType param) { return (OBJ.*LPFN)(param);}
private:
ReturnType (ClassType::*LPFN)(ParamType);
ClassType OBJ;
};
template<typename ReturnType, typename ClassType, typename ParamType>
CFunctionCall<ReturnType, ClassType, ParamType> Bind(ReturnType (ClassType::*lpfn)(ParamType), const ClassType& obj)
{
return CFunctionCall<ReturnType, ClassType, ParamType>(lpfn, obj);
}
class CFooBar{
public:
bool MemFun(int number){cout << number << endl; return true;}
};
void main()
{
CFooBar oFooBar;
Bind(&CFooBar::MemFun, oFooBar)(80);
//CFunctionCall<bool, CFooBar, int> oFunctionCall = Bind(&CFooBar::MemFun, oFooBar);
//oFunctionCall(100);
}
Boost.bind的实现源码
最新推荐文章于 2024-05-09 23:31:00 发布