C++ 指向类成员函数的指针

2023-11-05

记录两种可以间接调用类成员函数的方法,一种是直接使用函数指针,另一种使用C++11的function模板配合bind函数实现对固定类对象的成员函数调用。

定义类,新建类的对象

class Cfun {
public:
    void fun(int x) {
        cout << x << endl;
    }
};
Cfun cf, *p = &cf;

通过函数指针调用类成员函数

void call_Cfun1(void (Cfun::*fun_)(int), Cfun &obj, int v) {
    (obj.*fun_)(v);
}

int main(){
	//函数指针
    void (Cfun::*fp)(int);
    fp = &Cfun::fun;
//    (p->*fp)(2);
    call_Cfun1(fp, *p, 2);


    //两种方式定义函数指针的别名
    typedef void (Cfun::*name1)(int);
    name1 fp2 = &Cfun::fun;
//    (p->*fp2)(3);
    call_Cfun1(fp2, *p, 3);

    using name2 = void (Cfun::*)(int);
    name2 fp3 = &Cfun::fun;
//    (p->*fp3)(4);
    call_Cfun1(fp3, *p, 4);
}

通过function模板配合bind函数实现对固定类对象的成员函数调用

void call_Cfun2(function<void(int)> fun_, int v) {
    fun_(v);
}


int main(){
    // function模板配合bind函数
    function<void(int)> fp4 = std::bind(&Cfun::fun, cf, std::placeholders::_1);
//    fp4(5);
    call_Cfun2(fp4, 5);
}

总结: 第一种方法相对灵活,成员函数的指针和类对象保持分离,第二种方法适用于需调用固定类对象的成员函数的情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 指向类成员函数的指针 的相关文章

  • boost::multi_index_container 复合键中的 equal_range 与比较运算符

    我正在尝试从多索引容器查询结果 其中值类型是三个元素的结构 第一个值已给出 但第二个和第三个值必须大于或小于查询参数 经过搜索后 我发现必须实现自定义密钥提取器 并且这里的一些链接建议相同 但我无法实现它 boost multi index
  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var

随机推荐

  • Vulkan Windows VS2022 开发环境配置

    1 确保编译器支持C 17 所以需要Visual Studio 2017及其以上版本 我这里用的是2022 确保环境安装了CMake CMake gui 可选装 2 下载Vulkan SDK 到 https vulkan lunarg co
  • Open3d读写pcd点云文件

    本文为博主原创文章 未经博主允许不得转载 本文为专栏 python三维点云从基础到深度学习 系列文章 地址为 https blog csdn net suiyingy article details 124017716 1 Open3d 安
  • 计算机ip 地址异常,电脑显示IP地址错误怎么办

    有用户和小编反映 电脑无法上网 经过诊断后显示是IP地址错误的原因 如果我们遇到了这样的错误应该怎么办 所以 在下面的内容中 小编要和大家介绍在电脑提示IP地址错误无法上网的具体解决方法 win8 1 14 首先确定是否禁用了本地连接 如果
  • 线索二叉树

    线索二叉树 线索二叉树的概念 1 线索 线索是一种对二叉树的操作 意思是对二叉树进行线索化 其目的是使线索化后的二叉树具有方便被遍历的特点 即不使用递归和栈也可以对线索化之后的树进行中序遍历 2 基于中序遍历的线索二叉树 中序遍历 即先遍历
  • json 数组读取排序问题

    今天遇到一个依赖健值数组读取排序的问题 接口开发同事返回的json格式是这样的 我在小程序调用接口读取数组遍历之后发现排序乱了 price info 08 01 price 9999 booked 0 02 price 99999 book
  • 硬件施工的特点

    硬件施工有别于软件施工 施工管理方法存在差异 相比软件施工 硬件施工的特点 1 硬件施工通常需要垫资 2 设备安全 施工安全要小心 包括失窃 丢失 意外损失等 3 生产供货 物流周期属于强限制 4 品牌型号需明确 变更需要走正式流程 手续不
  • C基础(五)作用域和内存管理

    目录 一 作用域 1 1 作用域和生命周期 二 内存区域划分 三 堆内存的分配和释放 3 1 malloc分配堆内存 3 2 free释放堆内存 3 3 思考 解决函数返回值是指针的问题 方案一 返回一个在堆内存分配的地址指针变量 方案二
  • Java中this关键字

    含义 this关键字指代当前对象 本质就是 创建好的对象的地址 当一个对象创建后 Java虚拟机就会给对象分配一个内存空间和一个引用自身的指针 这个指针的名字就是this 用法 1 访问类中的成员变量 用来区分成员变量和局部变量 publi
  • 关于JDBC中properties默认编码格式为ISO-8859-1导致使用资源绑定器的getString方法出现乱码的解决办法

    在JDBC的注册驱动与连接数据库方面 通常将driver url user password来放入配置文件中 并使用资源绑定器ResourceBundle来更快捷灵活地进行编程 而资源绑定器的实例方法getString key 如果传入的k
  • 区块链相关

    区块链 一个个区块组成的链表 一 密码学原理 哈希碰撞 x不等于y 但是H x H y 不同的输入 输出却一致 这就称为 哈希碰撞 collision resistance puzzle friendly 不能预测输入最终的输出结果 hid
  • Unity 鼠标控制物体的移动

    一 鼠标控制物体移动 using System Collections using System Collections Generic using UnityEngine public class ControlMove MonoBeha
  • 试用74LS161和必要的门电路实现11进制计数器(要求用同步置数法实现)

    题目要求实现11进制计数器 则电路共有11个有效状态 我们可以选择0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010这11个状态作为电路的有效状态 按照上述状态选择方式 应向下图示接
  • 【 PMU】信号生成、采样、分割、估计器应用和误差计算(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 PMU 信号生成 采样 分割 估计器应用和
  • 一个简单的虹膜定位程序

    一个简单的虹膜定位实现 虹膜定位程序 clear close all I imread ip1 jpg f rgb2gray I imhist f 求图像的直方图 F Size M F Size N size f 获取f的行和列 T 84
  • Java驱动方式JDBC连接SQL Server

    Java驱动方式JDBC连接SQL Server 第一步 下载微软官方的SQL Server JDBC 驱动程序 6 0 https www microsoft com zh CN download details aspx id 1177
  • 设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性

    设顺序表va中的数据元素递增有序 试写一算法 将x插入到顺序表的适当位置上 以保持该表的有序性 先建立一个待插入的结点 然后依次与与链表中的各结点的数据域比较大小 找到插入该结点的位置 最后插入该结点 算法如下 include
  • 遇到的debug整理20190107

    已解决 最后的链结失败 错误的值 RT0 o relocation R X86 64 PC32 against symbol phgTetFaceVertexi can not be used when making a shared ob
  • Java学习笔记-多线程

    4 5 多线程 线程与进程 进程 是指一个内存中运行的应用程序 每个进程都有一个独立的内存空间 线程 是进程中的一个执行路径 共享一个内存空间 线程之间可以自由切换 并发执行 一个进程最少有一个线程 线程实际上是进程基础之上的进一步划分 一
  • 【算法】回溯

    子集树 include
  • C++ 指向类成员函数的指针

    记录两种可以间接调用类成员函数的方法 一种是直接使用函数指针 另一种使用C 11的function模板配合bind函数实现对固定类对象的成员函数调用 定义类 新建类的对象 class Cfun public void fun int x c