模版函数指针,C++委托的实现
来源:互联网 发布:淘宝卖家都用什么软件 编辑:程序博客网 时间:2024/06/05 20:36
今天写引擎的时候,很想加入一些回调函数,以前一直没时间整理这块,这次一定要下决心好好整整代码,纯粹用多态,很多类非要加个帽子,类之间的关系也显的很单一,有的情况需要用到委托的回调机制,这是个很好的东西,在C#里面是原生支持的,C++里面本来函数指针是个不错的选择,可到了对象里面,成员函数指针还有那么好用吗?这原本是另C++程序员非常失望和无赖的,难道一说到成员函数指针就真的那么不好用,甚至要沦为被唾弃的命运?并非入此,别忘了,C++里面还有很强的利器,C#和Java后天才具备的特性可是C++先天就具备的哦,那就是范型,C++里面的用的是模版,而且如果把 模版和成员函数指针结合在一起,那就威力无比了,那应该叫做就是“成员模版函数指针”,C++的教科书上有这个名词吗?我查了查,好像是没有,而且网上很多资料竟然说这个不能实现之类的话,我都怀疑那些如此断言的人是否太不负责仁了,误导人啊。
当然指想成员函数的指针,这里面的确有段C++设计的问题,C++的成员函数地址通过对象外去引用不能直接通过“&对象.方法”的方式来引用,这个在C++标准里面是没有的,很多人到这里就绝望了,可间接引用呢?而且用很优雅的方式来引用呢?
好了,我也不绕圈子了,给出我的代码,一个简单的 “成员模版函数指针” 的实现,看看C++是如何优雅的实现委托的,真的非常非常的优雅,由于完全自己摸索出来的,真是感慨万千啊。
#include "stdafx.h"
#include <iostream>
using namespace std;
template<typename T>
class A
{
private:
typedef int (T::*delegateFun)(int);
T * _This;
delegateFun _deleGate;
public:
//This被代理的对象, delegateFun被代理的方法
A(T * This, int (T::*delegateFun)(int))
{
_This = This;
_deleGate = delegateFun;
}
//c被代理的参数
int execue(int c)
{
return (_This->*_deleGate)(c);
}
};
class B
{
public:
int FunA(int a) {return a + 10;}
int FunB(int a) {return a - 10;}
B()
{
}
};
int _tmain(int argc, _TCHAR* argv[])
{
B *objB = new B();
A<B> delegateObj1(objB, (&B::FunA));
A<B> delegateObj2(objB, (&B::FunB));
cout << delegateObj1.execue(10) <<endl;
cout << delegateObj2.execue(20) <<endl;
return 0;
}
- 模版函数指针,C++委托的实现
- 模版函数指针,C++委托的实现
- 模版函数指针,C++委托的实现
- 模版函数指针,C++委托的实现
- 模版函数指针,C++委托的实现
- 模版函数指针,C++委托的实现-原创
- 模版函数指针,C++委托的实现-原创
- C# 委托 C函数指针
- 成员函数指针与高性能的C 委托
- c++实现delegate—模版函数指针
- C函数指针和C#委托
- 在C++中用虚函数及模版实现委托
- C++中用模板函数指针实现委托
- C++委托实现(函数指针,function+bind,委托模式)
- C语言宏实现模版函数
- C#的委托与C语言下的函数指针简单比较
- 成员函数指针与高性能的C委托(中篇)
- C++ VS C#(7):指向函数的指针和委托
- [LeetCode] Same Tree
- 3Sum
- Ofbiz 和 Mysql中文乱码解决方法
- OFBiz 模块化结构分析
- OFbiz实体引擎指南
- 模版函数指针,C++委托的实现
- 动态规划 - 最长递增子序列
- Java连接MySQL数据库
- 3Sum Closest
- niginx的配置
- 分析cocos2d-x在Android上的编译过程(1):cocco2d-x是如何生成的Android的目录结构
- dedeCMS 注册失败,请检查资料是否有误或与管理员联系-解决方法
- OpenCV学习之四: 矩阵的掩码操作
- Android Paint和Color类