小编ivz*_*ave的帖子

将lambda表达式作为c ++中的成员函数指针传递

我有一个框架函数,它需要一个对象和一个成员函数指针(回调),如下所示:

do_some_work(Object* optr, void (Object::*fptr)()); // will call (optr->*fptr)()
Run Code Online (Sandbox Code Playgroud)

我怎样才能将lambda表达式传递给它?想做这样的事:

class MyObject : public Object
{
    void mystuff()
    {
        do_some_work(this, [](){ /* this lambda I want to pass */ });
    }
};
Run Code Online (Sandbox Code Playgroud)

这一切的意义是不要使用回调混乱MyObject类的接口.

UPD 我可以改进do_some_work,因为我不控制框架,因为实际上它不是一个函数,它有数百个.整个框架基于该类型的回调.没有lambda的常见用法示例:

typedef void (Object::*Callback)();
class MyObject : public Object
{
    void mystuff()
    {
        do_some_work(this, (Callback)(MyClass::do_work));
    }
    void do_work()
    {
        // here the work is done
    }
};
Run Code Online (Sandbox Code Playgroud)

解决方案这是基于Marcelo答案的解决方案:

class CallbackWrapper : public Object
{
    fptr fptr_;
public:
    CallbackWrapper(void (*fptr)()) : fptr_(fptr) { } …
Run Code Online (Sandbox Code Playgroud)

c++ lambda function-pointers c++11

5
推荐指数
1
解决办法
5085
查看次数

标签 统计

c++ ×1

c++11 ×1

function-pointers ×1

lambda ×1