C++回调函数的使用

在C++程序设计中,我们都是通过头文件将库的接口提供出来,在头文件中需要尽量隐藏接口内部实现的细节,经常有这样一种情况,在C++源文件中需要用到一些回调函数,比如static_function_a,当然,这个回调函数可以是类的静态函数
或者类外定义的函数,在这个回调函数中,我们又需要对对象内部的private数据进行操作,但是显然,this指针在static_function_a
中是不能使用的,这个适合,我们就可以在注册回调函数的时候将this指针当参数传递进去,这个方法是在回调函数中使用类对象数据
的一个常用方法

沙发自己坐:lol

没人理我,那我继续啰嗦。。。咳咳。。

前面说到,在C++源文件的回调函数里面要访问对象成员的话需要将对象指针当做参数传递进入,想一下就能发现,虽然在回调函数static_function_a里面使用A *p = static_cast<A *>(参数)可以得到对象指针p,但是我们需要对对象进行操作还是需要通过p来使用类A的public成员,如果这个public函数,比如叫void test_a,我们根本不打算提供给第三方作为接口,那么将其暴露为public本身就是一种不算太好的实践,这个时候,有没有更好的方法呢?答案是肯定的(C++这东西,虽然有点复杂,但好就好在,只要你能想到的需求,它基本上都能满足你:lol)

这种情况下,友元类就排上了用场。
头文件中,A的声明里,将B作为它的友元类
在源文件中,B中定义一个静态函数,比如叫static_function_b(注意这个是B的静态的函数,不是全局的),在前面的static_function_a中,我们得到了一个A对象的指针p,我们将它传递给static_funtion_b,现在在static_funtion_b里面,我们也有了一个A的对象指针p1,因为static_function_b是B作用域类的函数,而B是A的元,这时我们就可以直接使用p1来获取A对象的private成员了。