前言

一般来讲用于绑定回调的函数是地址已确定的类似全局函数或者类的成员静态函数等,如果有 特定的需求比如必须要绑定类的普通成员函数,就需要使用特别的方法,在这里推荐c++库所支持的使用一种模板函数指针funtion和bind结合使用的方法

正文

需要包含头文件#include
示例代码如下:

#include <iostream>
#include <string>
#include <functional>typedef void(* fun_ptr )(int);class Base
{public:Base() {}void BaseCout(int v){cout << __func__ << " : " << v << endl;}void setCallBack(fun_ptr fun,int val){fun(val);}void setCallBack(std::function<void(int)> fun, int val){fun(val);}void test(){std::function<void(int)> func_cpp11;func_cpp11 = std::bind(&Base::BaseCout, this, std::placeholders::_1);func_cpp11(1000);}
};void printf__(int val)
{cout << __func__ << " : " << val << endl;
}int main()
{Base b;std::function<void(int)> func_cpp11;func_cpp11 = std::bind(&Base::BaseCout, &b, std::placeholders::_1);func_cpp11(100);b.setCallBack(func_cpp11, 1);b.test();
}

简单说明一下 ,std::placeholders::_1表示参数占位符1 如果有多个函数输入参数,则std::placeholders::_2以此类推 ;需要注意的是,如果要用这里说的funtion表示函数指针,那么注册函数的函数形参类型也必须是funtion的类型

C++ 实现类的成员函数绑定回调相关推荐

  1. 将类的成员函数作为回调函数(外一篇:友元函数)

    转自:http://blog.csdn.net/xylary/article/details/1548596 将类成员函数用做C回调函数 提出问题:  回调函数是基于C编程的Windows SDK的技 ...

  2. 如何定义和实现一个类的成员函数为回调函数

    如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过.通过查询资料发现,其错误是普通的C++成员函数都隐含了一个传递函数作为参数,亦即"this"指针,C++ ...

  3. c++类的成员函数作回调函数为啥要声明为static的

    简单说明 C++的类成员函数不能像普通函数那样用于回调,因为每个成员函数都需要有一个对象实例去调用它. 把成员函数作为回调函数,可以把该成员函数声明为静态成员函数,但这样做有一个缺点,就是会破坏类的结 ...

  4. C++类成员函数作回调函数

    前面写了一篇文章 C语言消息注册派发模式 介绍了下我理解的C语言消息派发.因为C语言是函数式语言,写回调函数的时候很简单 参数就是一个简单的函数指针就好了, 那在C++里的时候 就有些不一样了,虽然C ...

  5. oc 协议 回调 静态成员_每日一问:c++类的成员函数,能作为线程的参数吗?

    问:类的成员函数可以传入线程参数吗? 回答: 如果c语言的全局函数,可以. 如果是类的静态成员函数,可以 如果是类的普通成员函数,不可以 为什么? <深入探索C++对象模型>中提到成员函数 ...

  6. 关于使用类成员函数作为回调的方法

    为什么类成员函数不能直接做为回调函数? 因为windows中,回调函数都是显式使用CALLBACk修饰符修饰,也就是_stdcall参数传递方式._stdcall修饰的函数,参数从右至左依次压入堆栈, ...

  7. c++11 bind直接绑定未初始化类的成员函数、类对象的operater()的方法与区别

    针对标题的两种情况,使用起来有一定的特殊性,特此记录下. 至于其他常规的bind使用方法,网上有很多文章有介绍,也可以看这篇文章. 标题的两种情况: 情况一: 这个例子用了两个知识: 第一,关于std ...

  8. C++中 线程函数为静态函数 及 类成员函数作为回调函数(转载)

    C++中 线程函数为静态函数 及 类成员函数作为回调函数 线程函数为静态函数: 线程控制函数和是不是静态函数没关系,静态函数是在构造中分配的地址空间,只有在析构时才释放也就是全局的东西,不管线程是否运 ...

  9. 类的成员函数作为函数指针

    网上找了半天没找到,还是看官方文档比较清晰:std::function - cppreference.com (polytechnique.fr) 同时给出自己设计C类型的成员函数指针的形式. 其实函 ...

最新文章

  1. iOS开发之--打印一堆奇怪东西的解决方案
  2. 第二十篇:定义一个整形变量
  3. 怎么写脚本_直播脚本怎么写|请收下这份攻略
  4. java怎么配置哨兵模式_redis 哨兵模式配置与spring集成
  5. 机器人砖机视频_全自动透水砖机生产线需严格遵守的标准工艺流程
  6. [js]删除以 [ 开始以 ]结尾且不含:内容
  7. 最佳适配算法和最差适配算法_影响开放社区的最佳(和最差)方法
  8. 中科大博士写外挂被抓:涉案总牟利 300 多万,每月分得 4~6k
  9. 企业开发基础设施--序
  10. 以太坊 ERC EIP是什么
  11. Leetcode之Teemo Attacking 问题
  12. Java文件的上传和下载
  13. 33.Jump Game(跳步游戏)
  14. MySql导入、导出数据解决方案(SQL语句)
  15. micropython是什么意思_介绍 MicroPython 语言
  16. python运算符讲解
  17. 基层管理者必备的能力和素质
  18. Docker数据卷挂载相关
  19. 安防工程商前期收集客户信息15种方法与详细流程
  20. 比特率 Kbps kbit/s 1KB/s Byte 的正确理解

热门文章

  1. 传送带(三分套三分)
  2. 科大讯飞语音转文本(极速转换和普通转换两种)
  3. [RFID]射频卡介绍(一)ID-EM4100
  4. data block address
  5. 【数学建模暑期培训】配送中心选址问题
  6. MySQL备份系列--备份方案总结性梳理
  7. 【流媒体】视频点播流媒体服务器调研
  8. 十年磨一剑之我眼中的京东
  9. 如何姿势优美地招不到合适的程序员?——招不聘独孤九式
  10. 【图像处理】图像拼接——图像配准、图像融合