类成员函数作为回调使用示例

在编写C++项目时,经常需要将类的某个成员函数作为回调函数使用,这里总结两个方法:

1.使用lambda表达式,将类成员函数二次封装后使用,代码示例:

复制代码
#include<funtional>
#include<memory>
class A {
public:
    A(std::function<int(int)> callback):m_callback(callback)
    {
    }
    int Run(int a)
    {
        return m_callback(a);     
    }
private:
    std::functin<int(int)> m_callback;
};

class B {
public:
    B()
    {
         m_a = std::make_shared<A>([&](int a){return this->callback(a);});
    }
    int callback(int a){
         std::cout << a << std::endl;
    }
private:
    std::shared_ptr<A> m_a;
};
复制代码

2.使用std::bind,将类成员函数封装后使用,代码示例:

复制代码
#include<funtional>
#include<memory>
class A {
public:
    A(std::function<int(int)> callback):m_callback(callback)
    {
    }
    int Run(int a)
    {
        return m_callback(a);     
    }
private:
    std::functin<int(int)> m_callback;
};

class B {
public:
    B()
    {
         m_a = std::make_shared<A>(std::bind(&B::callback, this, std::placeholders::_1));
    }
    int callback(int a){
         std::cout << a << std::endl;
    }
private:
    std::shared_ptr<A> m_a;
};
复制代码

 

posted @   谢耳朵的猫  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示