简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
1.前言
本篇目的:C++类之间函数指针访问。
2.应用实例
v1.0
#include <iostream>
#include <string>
#include <stdio.h>
#include <functional>
using namespace std;
class ICameraService{
public:
//1.返回类型:ICameraService*; 参数类型(int, string buf).
ICameraService* test(int a, string buf){
printf("xxx----------%s(), line = %d, a = %d, buf = %s\n",__FUNCTION__,__LINE__,a,buf.c_str());
return this;
}
void print(){
printf("xxx----------%s(), line = %d\n",__FUNCTION__,__LINE__);
}
};
int main(void){
//0.函数指针返回类型为:ICameraService*,是类对象ICameraService;定义新的函数指针类型为:TCamCallback.
typedef ICameraService* (ICameraService::*TCamCallback)(int a, string buf);
//1.初始化回调函数.
TCamCallback tcb = &ICameraService::test;
//2.取出test函数地址ICameraService().*tcb.
//v1.0
ICameraService *tt = (ICameraService().*tcb)(10,"2222");
tt->print();
//v2.0: 因为函数指针类型TCamCallback返回ICameraService类型,所以可以直接调用其成员函数print.
(ICameraService().*tcb)(10,"2222")->print();
}
注意:
ICameraService Ic;
和ICameraService();
都表示构造函数.
v2.0
#include <iostream>
using namespace std;
class TEST {
public:
//函数指针返回类型为:TEST类; 函数指针定义新类型:CallBack.
typedef TEST* (TEST::*CallBack)(int);
int createComponent(int a , int b){
printf("xxx------------->%s(), line = %d, a = %d, b = %d\n",__FUNCTION__,__LINE__,a,b);
return a + b;
}
};
class STU : public TEST{
public:
TEST::CallBack callback;
TEST* print(int num) {
printf("xxx------------->%s(), line = %d, num = %d\n",__FUNCTION__,__LINE__,num);
return nullptr;
}
};
int main() {
STU stu;
//stu.callback获取STU::print函数的地址
stu.callback = static_cast<TEST::CallBack>(&STU::print);
//v1.0
//*(stu.callback):表示首先取出print函数的地址; 所以stu.*(stu.callback):表示调用print回调函数.
TEST *ss = (stu.*(stu.callback))(5);
ss->createComponent(10, 20);
//v2.0
(stu.*stu.callback)(50)->createComponent(100, 200);
return 0;
}