c++两个普通类利用回调函数传递信息

本文介绍了在C++中如何使用回调函数在两个类之间安全地传递数据,以解决全局变量带来的问题。通过定义函数指针并在类中设置成员变量存储另一类的回调函数地址,实现了线程安全且封装性好的通信方式。这种方法比直接使用全局变量更优,特别是在多线程环境中。同时,文中也提及了Qt的信号槽机制作为更高级的回调实现方式。

       如果要在两个class对象之间传递数据,最简单直接的方法在一个类中定义一个全局变量,然后在另一个类里面extern这个变量,这样就等于这个全局变量同时作用于两个类对象中,这样做能暂时解决问题,然而可能会出现新的问题,比如,代码的复用性不好,全局变量会在main之前初始化,增加了程序的负担;还有一个致命的问题,如果是多线程程序,就需要加锁保证同一时刻只能有一个对象在访问修改这个全局变量,程序的效率可能会下降,当然如果定义的全局变量过多,由于加锁不慎很可能会导致死锁,致使程序奔溃,今天介绍一中很实用的办法,线程安全并且封装性好;先看代码

#include <iostream>    

using namespace std;  

typedef void(*CallBack)(char* s);
 
class A{
public:
	void setCbk(CallBack call_back){
	    this->_my_call_back = call_back;
        _my_call_back("123456789");
    }
public:
	A(){}
	~A(){}
	CallBack _my_call_back;
};

class  B{
public:
	static void OnCallBack(char * s){
        cout << "gxs s:" << s << endl;
    }
  
public:
	B(){        
	    A a;
	    a.setCbk(B::OnCallBack);	//注册回调函数,将ts_data_input和当前类注册到类PlayerRelay中
    }
	~B(){}
};

int main()
{
	B b;
	return 0;
}

       首先typedef void(*CallBack)(char* s)申明了一个函数指针,这个C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值