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

在编写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 @ 2024-04-26 11:01  谢耳朵的猫  阅读(85)  评论(0)    收藏  举报