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

#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. 一步一步学习SignalR进行实时通信_5_Hub

    原文:一步一步学习SignalR进行实时通信_5_Hub 一步一步学习SignalR进行实时通信\_5_Hub SignalR 一步一步学习SignalR进行实时通信_5_Hub 前言 Hub命名规则 ...

  2. Linux下 fcntl 函数用法说明

    功能描述:根据文件描述词来操作文件的特性. 文件控制函数         fcntl -- file control LIBRARY         Standard C Library (libc, ...

  3. Javascript禁止父元素滚动条滚动, pc、移动端均有效

    在网页中经常会遇到这样的场景, 网页比较长有滚动条, 然后网页内的某个内容块里面的内容也比较长, 也具有滚动条.当鼠标移到内容块中使用滚动条来滚动查看内容到达底部或头部的时候,父元素的滚动条也就开始滚 ...

  4. error: ld returned 1 exit status 和 error:undefined reference

    undefined reference 往往是链接时出现错误,无法解析引用.这篇文章总结的很好undefined reference问题总结 error: ld returned 1 exit sta ...

  5. user Collaborative Filtering

    ---恢复内容开始--- 算法步骤: 1.计算用户相似度 2.对于特定用户,选出k个最相似的用户,将这些用户评价过的前k好的物品推荐给该用户   用户相似度 度量: 其中|N(u)|表示用户u评价过的 ...

  6. java reflection总结

    一.java反射常用方法 获取Class的几种方式: Class class1 = String.class;// 该方法最为安全可靠,程序性能更高.         Class class2 = s ...

  7. CocoaPods的安装及安装出现问题的处理

    ocoaPods安装分两步:第一步.修改本机的Ruby环境:第二步.安装. 第一步:步骤1.打开终端输入   gem sources -l   查看本机的Ruby环境:若显示“https://ruby ...

  8. app被Rejected 的各种原因翻译(转)

    原文:http://www.cnblogs.com/sell/archive/2013/02/16/2913341.html 1. Terms and conditions(法律与条款) 1.1 As ...

  9. C# 中奇妙的函数–7. String Split 和 Join

    很多时候处理字符串数据,比如从文件中读取或者存入 - 我们可能需要加入分隔符(如CSV文件中的逗号),或使用一个分隔符来合并字符串序列. 很多人都知道使用split()的方法,但使用与其对应的Join ...

  10. 艰苦的RAW格式数据恢复之旅

    艰苦的RAW格式数据恢复之旅 1.RAW 格式形成原因 2.RAW 格式的解决的方法 经验之谈: 1.RAW 格式形成原因 关于形成的原因,在网上搜索了下,千奇百怪的都有,就不一一诉说了,可是有果必有 ...