实现类成员函数的回调,并非静态函数;区分之

#ifndef __CALLBACK_PROXY_H_
#define __CALLBACK_PROXY_H_ template <typename Tobject, typename Tparam>
class CCallbackProxy{
typedef void (Tobject::*CbFun)(Tparam*); public:
void Set(Tobject *pInstance, CbFun pFun);
bool Exec(Tparam* pParam);
private:
CbFun pCbFun; //回调函数指针
Tobject* m_pInstance; //调用对象
}; template <typename Tobject, typename Tparam>
void CCallbackProxy<Tobject, Tparam>::Set(Tobject* pInstance, CbFun pFun)
{
m_pInstance = pInstance;
pCbFun = pFun;
} template <typename Tobject, typename Tparam>
bool CCallbackProxy<Tobject, Tparam>::Exec(Tparam* pParam)
{
(m_pInstance->*pCbFun)(pParam);
return true;
} #endif

命名为:CallbackProxy.h

 #include <iostream>
#include "CallbackProxy.h" class CTest
{
public:
CTest(int nNum):m_nSum(nNum){
}
void CbPrintSum(int *pnAddNum){
std::cout << "The sum is: " <<m_nSum +*pnAddNum << std::endl;
}
private:
int m_nSum;
}; int main()
{
CCallbackProxy<CTest, int> CbProxy;
CTest test();
CbProxy.Set(&test, &CTest::CbPrintSum); int num = ;
CbProxy.Exec(&num);
return ;
}

命名为:test.cpp

g++ test.cpp -g -Wall && ./a.out

c++ 回调类成员函数实现的更多相关文章

  1. 理解ATL中的一些汇编代码(通过Thunk技术来调用类成员函数)

    我们知道ATL(活动模板库)是一套很小巧高效的COM开发库,它本身的核心文件其实没几个,COM相关的(主要是atlbase.h, atlcom.h),另外还有一个窗口相关的(atlwin.h), 所以 ...

  2. 并发编程: c++11 thread(Func, Args...)利用类成员函数创建线程

    c++11是VS2012后支持的新标准,为并发编程提供了方便的std::thread. 使用示例: #include <thread> void thread_func(int arg1, ...

  3. Item 22: 当使用Pimpl机制时,在实现文件中给出特殊成员函数的实现

    本文翻译自<effective modern C++>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 如果你曾经同过久的编译时间斗争过,那么你肯定对Pi ...

  4. 成员函数指针与高性能C++委托

    1 引子 标准C++中没有真正的面向对象的函数指针.这一点对C++来说是不幸的,因为面向对象的指针(也叫做“闭包(closure)”或“委托(delegate)”)在一些语言中已经证明了它宝贵的价值. ...

  5. [转]成员函数指针与高性能的C++委托

    原文(作者:Don Clugston):Member Function Pointers and the Fastest Possible C++ Delegates 译文(作者:周翔): 成员函数指 ...

  6. 成员函数指针,动态绑定(vc平台)

    上一篇介绍了gcc对成员函数指针做了thunk的处理,本篇介绍vc对成员函数指针如何处理,还有动态绑定相关的处理. 同样用回上一篇的例子: struct point {float x,y;}; str ...

  7. Go结构体实现类似成员函数机制

    Go语言结构体成员能否是函数,从而实现类似类的成员函数的机制呢?答案是肯定的. package main import "fmt" type stru struct { testf ...

  8. C++点滴----关于类常成员函数

    关于C++中,类的常成员函数 声明样式为:   返回类型 <类标识符::>函数名称(参数表) const 一些说明: 1.const是函数声明的一部分,在函数的实现部分也需要加上const ...

  9. 为什么 C++ 中成员函数指针是 16 字节?

    当我们讨论指针时,通常假设它是一种可以用 void * 指针来表示的东西,在 x86_64 平台下是 8 个字节大小.例如,下面是来自 维基百科中关于 x86_64 的文章 的摘录: Pushes a ...

随机推荐

  1. 适合入门自学服装裁剪滴书(更新ing)

    [♣]适合入门自学服装裁剪滴书(更新ing) [♣]适合入门自学服装裁剪滴书(更新ing) 适合入门自学服装裁剪滴书(更新ing) 来自: 裁缝阿普(不为良匠,便为良医.) 2014-04-06 23 ...

  2. paip.c++ qt 共享库dll的建立

    paip.c++ qt 共享库dll的建立 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.net/at ...

  3. ORA-07445 [mdagun_iter+957] When Using SDO_AGGR_UNION 问题处理

    问题描写叙述: ORA-07445: mdagun_iter()  [Address not mapped to object] Oracle Database 10g Enterprise Edit ...

  4. C++Primer 中间Sales_items.h头文件

    #ifndef SALESITEM_H #define SALESITEM_H #include <iostream> #include <string> class Sale ...

  5. 第二章SignalR所支持的平台

    第二章SignalR所支持的平台 SignalR支持各种服务器和客户端的配置.此外,每种传输方式都有自身的配置要求和限制:如果某种传输方式不被系统支持,SignalR优雅地将故障转移到其他类型的传输方 ...

  6. datatable赋值行

    datatable复制行:DataTable dt = "";  //这里是填充DataTable数据(""中为一个为datatable类型的值,赋值给dt)D ...

  7. JVM学习之实例分析JVM安全体系

    转自:http://www.importnew.com/17093.html,感谢分享 类加载器的作用就是将真实的class文件根据位置将该Java类的字节码装入内存,并生成对应的Class对象.用户 ...

  8. Log4Net_LayOut

    对Log4Net做了些基本记录 其中Layout常用参数的解释,我已实例为准. 测试程序源码如下: static void Main(string[] args) { log4net.Config.X ...

  9. 关于jQuery中toggle()函数的使用

    今天遇到一个有趣的例子,将它记录下来. 一个一级菜单,里边有一个二级菜单,二级菜单是通过锚点来链接页面元素的.想要实现的效果是当点击锚点时,页面链接到相应锚点,同时二级菜单隐藏,再点击一级菜单时,继续 ...

  10. Dnsmasq(局域网DNS,DHCP)

    安装:yum -y install dnsmasq   dnsmasq配置文件: /etc/dnsmasq.conf 默认指定DNS服务器(优先级)文件:/etc/resolv.conf 默认host ...