C++能干的事儿
文章平均质量分 80
nighsen
这个作者很懒,什么都没留下…
展开
-
在C++实现委托
<br />在前面提到回调了,那么现在就开始说委托吧。个人是这么理解委托的,就是一件事你不做或者不能做或者不想做,那么就委托给别人做,我只调用别人的函数接口就可以了,也就是我要实现一个功能,我只要接口,实际的实现委托给别人,突然有一天我要做的事的逻辑发生了变化,那么我也不需要更改自己的调用,只需要被委托者更换一下逻辑就可以了。同时,如果在一定的场合下要调用很多相同形式的函数,那么使用委托将很方便。<br />在设计模式中状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式。委托也可以接受多个实原创 2011-05-09 11:43:00 · 1934 阅读 · 1 评论 -
在C++实现”Final”
<br />在C#中有sealed关键字,而Java中有final关键字,其作用就是为了提供一种机制使一个类不能被继承。当然,C++不能^_^,但是他能实现,下面来讨论一下吧。<br /> <br />Method1:最简单的想法就是使一个类得构造函数和析构函数成为私有函数,这样,子类的构造函数和析构函数就无法调用父类的构造函数和析构函数,也就难以构造或者析构父类对象,就可以了。当然,这样我们也无法构造对象,这个,我们可以采用静态方法来创建和释放类得实例。如下:<br />class NoDerivedCl原创 2011-04-26 10:04:00 · 4009 阅读 · 0 评论 -
在C++实现回调
来看看怎么在C++中实现回调吧。Method1:使用全局函数作为回调在C语言中的回调很方便。当然,我们可以在C++中使用类似于C方式的回调函数,也就是将全局函数定义为回调函数,然后再供我们调用。typedef void(*pCalledFun)(int *);void GetCallBack(pCalledFunparafun){/*do something*/}如果我们想使用GetCallBack函数,那么就要实现一个pCalledFun类型的回调函数:void funCallback(int *iNum原创 2011-05-06 13:22:00 · 8643 阅读 · 2 评论 -
在C++实现回调(续)
Method6:使用类的非静态函数作为回调(采用thunk的方法2)在上面的实现过程中,可以看出来主要的部分就是这里: bMovEcx = 0xB9; dwThis = (DWORD)pThis; bJmp = 0xE9; dwRealProc = DWORD((INT_PTR)proc - ((INT_PTR)this+sizeof(THUNK)));意思就是Move Ecx pThis; 即把this指针保存到了ECX的寄存原创 2011-05-06 13:43:00 · 1669 阅读 · 0 评论 -
在C++实现反射
<br />反射这个特性在C++中是没有的。所谓反射,自己的认为就是通过一个名字就可创建、调用、获取信息等一系列的操作,这个在脚本语言里面是比较常见的,COM组件也类似,知道个ID名,就可以做很多的工作了。<br />看看JAVA中的描述:<br />JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为JAVA语言的反射机制。<br />JAVA反射机制主要提供了以下功能:在运行时判原创 2011-05-09 17:06:00 · 18991 阅读 · 4 评论