回调函数解析

#include<iostream>
#include<functional>
#include <memory>
using namespace std;
struct TesSt {
    void update(const string &in_str) {
        str = in_str;
        std::cout << "str:" << str << endl;;
    }
    string str;
};

void normFun(){ printf("I am normFun\n");}

class ProgramA{
public:
    void FunA2(){printf("I am FunA2\n");}

    static void FunA3(){printf("I am FunA3\n");}

    static void FunA2Wrapper(void *context){
        ((ProgramA*)context)->FunA2();
    }
};

class ProgramB{
    typedef std::function<void()> callbackFun;
public:
    void FunB1(callbackFun callback){
        callback();
    }
};

class ProgramC{
    public:
        void FunC1(void (*callback)())
        {
            callback();
        }

        void FunC2(void(*callback)(void*),void* context)
        {
            callback(context);
        }
};

TesSt g_test_st;
int main(int argc,char**argv)
{

    auto func1 = bind(&TesSt::update,&g_test_st,"hihi");
    func1();
    auto func2 = bind(&TesSt::update,g_test_st,"aaa");
    func2();
    std::cout<< g_test_st.str <<  std::endl;
    ProgramA pa;
    ProgramC pc;
    ProgramB pb;
    pc.FunC1(normFun);//回调普通函数
    pb.FunB1(ProgramA::FunA3);//回调类里静态函数
    pb.FunB1(std::bind(&ProgramA::FunA2,&pa));//回调类里面的普通函数,但是非static函数只能使用static变量,不方便
    pc.FunC2(ProgramA::FunA2Wrapper,&pa);//回调类里面的普通函数,将普通函数转化为另一个的static函数
    return 1;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值