C++之类之间访问函数指针(一百八十一)

news2024/10/6 1:47:15

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/885934.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一、window配置微软商店中的Ubuntu,及错误解决方法

&#xff08;1&#xff09;首先&#xff0c;在微软商店中搜索“Ubuntu”&#xff0c;下载你喜欢的版本(此处) &#xff08;2&#xff09;设置适用于window的Linux子系统&#xff0c;跟着红色方框走 点击“确定”之后&#xff0c;会提示你重启电脑&#xff0c;按要求重启电脑即可…

无涯教程-Perl - sub函数

描述 此函数定义一个新的子例程。上面显示的参数遵循以下规则- NAME是子例程的名称。可以在有或没有原型规范的情况下预先声明命名的子例程(没有关联的代码块)。 匿名子例程必须具有定义。 PROTO定义了函数的原型,调用该函数以验证提供的参数时将使用该原型。 ATTRS为解析…

管理类联考——逻辑——真题篇——按知识分类——汇总篇——一、形式逻辑——假言—公式化转换—等价+矛盾

文章目录 第一节 假言—公式化转换—等价矛盾真题&#xff08;2012—38&#xff09;—假言—A→B的公式化转换—A→B的等价命题&#xff1a;①逆否命题&#xff1a;非B→非A。真题&#xff08;2015—47&#xff09; —假言A→B的公式化转换—A→B的等价命题&#xff1a;①逆否…

重新定义物化视图,你必须拥有的极速湖仓神器!

当今企业在进行数据分析时&#xff0c;面临着多重问题和挑战&#xff0c;而数据加工作为其中不可或缺的一环显得尤为重要。 首要的挑战在于数据加工的复杂性。从数据的产生到最终产生价值的整个链路仍然十分复杂&#xff0c;涉及多个环节和技术方案&#xff0c;这导致了技术复…

Java培训机构出来的好找工作吗?有的人还是没有工资!

Java培训机构出来的好找工作吗?为什么有的人找不到呢?事实上&#xff0c;参加Java培训机构并不是直接保证找到工作&#xff0c;而是提供了一定的学习和就业支持。以下是关于Java培训机构和就业的一些要点&#xff1a; 1.学习质量和教学内容 好的Java培训机构通常提供系统化、…

设计模式 : 单例模式笔记

文章目录 一.单例模式二.单例模式的两种实现方式饿汉模式懒汉模式 一.单例模式 一个类只能创建一个对象,这样的类的设计模式就称为单例模式,该模式保证系统中该类只能有一个实例(并且父子进程共享),一个很典型的单例类就是CSTL的内存池C单例模式的基本设计思路: 私有化构造函数…

海外应用ASO优化的小技巧2

应用程序的名称可以表达很多内容&#xff0c;是应用程序元数据的重要组成部分&#xff0c;一个强大的标题可以识别应用中的潜在消费者&#xff0c;使得用户看名字就可以知道这个程序是做什么的&#xff0c;从而有助于转化率的提高。 1、详细的标题可以更好地帮助我们的软件。 …

windows权限维持—黄金白银票据隐藏用户远控RustDeskGotoHttp

windows权限维持—黄金白银票据&隐藏用户&远控&RustDesk&GotoHttp 1. 前置1.1. 初始问题1.1.1. 解决办法 2. 隐藏用户2.1. 工具原理2.2. 案例操作2.2.1. 单机添加用户2.2.1.1. 工具添加用户2.2.1.2. 工具查看隐藏用户2.2.1.3. 本地查看隐藏用户 2.2.2. 域内添加…

机器学习丨1. 机器学习概述

Author&#xff1a;AXYZdong 硕士在读 工科男 有一点思考&#xff0c;有一点想法&#xff0c;有一点理性&#xff01; 定个小小目标&#xff0c;努力成为习惯&#xff01;在最美的年华遇见更好的自己&#xff01; CSDNAXYZdong&#xff0c;CSDN首发&#xff0c;AXYZdong原创 唯…

IT团队如何引领企业走向创造价值的新途径?

随着疫情结束带来的经济回暖&#xff0c;我们无疑已做好了更充分的准备。信息技术使许多企业能够在关门歇业的情况下继续运营&#xff0c;以防止大规模集会并强制执行社会隔离。得益于信息技术支持团队&#xff0c;许多企业能够动员其员工进行远程工作&#xff0c;有些甚至只需…

C++ template 循环

在元编程循环中&#xff0c;我们不需要用while&#xff0c;for来循环&#xff0c;一般情况下都要用递归&#xff0c;例如&#xff1a; #include <iostream> using namespace std; template <int Head, int...Data> constexpr static int num Head num<Data..…

企业类型的软件著作权证书申请,一次通过十几张

大家好&#xff0c;我是小悟 关于软件著作权证书申请的内容&#xff0c;已经聊过很多次了&#xff0c;之前申请的都是个人类型&#xff0c;尝试了一下申请企业类型的&#xff0c;一口气提交了多张&#xff0c;也都顺利通过了。 其实个人和企业类型所需要的资料并没有什么差别&…

flutter 常见的状态管理器

flutter 常见的状态管理器 前言一、Provider二、Bloc三、Redux四、GetX总结 前言 当我们构建复杂的移动应用时&#xff0c;有效的状态管理是至关重要的&#xff0c;因为应用的不同部分可能需要共享数据、相应用户交互并保持一致的状态。Flutter 中有多种状态管理解决方案&#…

Ubuntu安装Apache+Php

环境&#xff1a;ubuntu 22.04 虚拟机 首先更新一下 sudo apt-get update sudo apt-get upgrade安装Apache2&#xff1a; sudo apt-get install apache2 输入y&#xff0c;继续。等着他恐龙抗浪抗浪的下载安装就好了 打开浏览器访问http://localhost/ 安装php&#xff1a; …

Java学习路线来啦!看到就是赚到

“Java学习路线来啦”&#xff0c;Java作为一门常用的编程语言&#xff0c;因其广泛使用和应用&#xff0c;在IT行业中备受青睐。无论是初学者还是有一定基础的开发者&#xff0c;学习Java的路线和步骤都是必须的。下面小编将为大家推荐几个Java学习的必经之路。 一、Java编程基…

微信小程序纯前端从阿里云OSS下载json数据-完整版

起因 因为云开发开始收费(貌似很久了),准备改造在以前的小程序,数据转到oss上,小程序使用原生,不算专业领域, 所以先百度.... 网上的教程真的是千篇一律,大部分开局就是require(ali-oss); 好点的npm install ali-oss --save开局,拼凑操作到最后发现要用云开发,因为云…

【KVM虚拟化环境部署】

环境部署 KVM虚拟化环境 1、装系统时手动选择安装 2、CentOS 7 最小化安装 yum install qemu-kvm qemu-img libvirt -y yum install virt-install libvirt-python virt-manager python-virtinst libvirt-client -y安装好CentOS 7后&#xff0c;去设置里面点击处理器&#x…

智能水表抄表解决方案

对于传统的水表抄表方式存在的繁琐、耗时以及人为误差等问题&#xff0c;提出了智能水表抄表解决方案&#xff0c;让水表管理更加智能高效。 以智能抄表TSM-MR为例&#xff1a;采用最新的人工智能图像识别技术&#xff0c;能识别各类水表数据&#xff0c;辅助大数据进行纠错&a…

【C语言程序设计】一、算法基础(思考题)

思考题 1、算法的特性是什么&#xff1f; 有穷性、确定性、可行性、输入性、输出性 2、举例说明什么是可计算和不可计算问题&#xff1f; 可计算问题是指可以用计算机算法解决的问题&#xff0c;即可以通过编写程序来得到问题的解决方案。例如&#xff0c;求两个数的和、找出一…

golang操作excel的高性能库——excelize/v2

目录 介绍文档与源码安装快速开始创建 Excel 文档读取 Excel 文档打开数据流流式写入 [相关 Excel 开源类库性能对比](https://xuri.me/excelize/zh-hans/performance.html) 介绍 Excelize是一个纯Go编写的库&#xff0c;提供了一组功能&#xff0c;允许你向XLAM / XLSM / XLS…