我想实例化的对象的成员函数传递给另一个功能。 实施例的代码如下。 我打开这样的作品,其中包括使用类似的λ或std ::绑定调用功能()从里面memberfuncpointertestclass另一功能的策略。 请注意,我不明白我最有谷歌发现了大约拉姆达或std ::绑定线程的,所以请,如果可能的话,保持简单。 另外请注意,我的群集没有C ++ 11,我想保持功能()一样简单,因为它是。 谢谢!
int functional( int (*testmem)(int arg) )
{
int a = 4;
int b = testmem(a);
return b;
}
class memberfuncpointertestclass
{
public:
int parm;
int member( int arg )
{
return(arg + parm);
}
};
void funcpointertest()
{
memberfuncpointertestclass a;
a.parm = 3;
int (*testf)(int) = &a.member;
std::cout << functional(testf);
}
int main()
{
funcpointertest();
return 0;
}
没有一个实例来指不能调用对象的方法。 所以,你需要在这两个实例来传递,以及要调用的方法。
尝试改变functional
到:
template <typename T, typename M>
int functional(T *obj, M method)
{
int a = 4;
int b = (obj->*(method))(a);
return b;
}
而你funcpointertest
到:
void funcpointertest()
{
memberfuncpointertestclass a;
a.parm = 3;
std::cout << functional(&a, &memberfuncpointertestclass::member);
}
这是一个工作std::function
,多态函数包装。 传递给功能(...)这样的函数对象:
#include <functional>
typedef std::tr1::function<int(int)> CallbackFunction;
int functional(CallbackFunction testmem)
{
int a = 4;
int b = testmem(a);
return b;
}
然后使用std::bind
到创建一个包装memberfuncpointertestclass ::实例的方法()的相同类型的功能对象:
void funcpointertest()
{
memberfuncpointertestclass a;
a.parm = 3;
CallbackFunction testf = std::bind(&memberfuncpointertestclass::member, &a, std::placeholders::_1);
std::cout << functional(testf);
}
检查这个项目的更多细节。