成员函数作为回调(member function as callback)

2019-10-18 01:26发布

我想实例化的对象的成员函数传递给另一个功能。 实施例的代码如下。 我打开这样的作品,其中包括使用类似的λ或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;
}

Answer 1:

没有一个实例来指不能调用对象的方法。 所以,你需要在这两个实例来传递,以及要调用的方法。

尝试改变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);
}


Answer 2:

这是一个工作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);
}

检查这个项目的更多细节。



文章来源: member function as callback