C++
文章平均质量分 83
gogogo
这个作者很懒,什么都没留下…
展开
-
在C++中模拟委托事件的方法(一)
关键字:C++、事件、指向函数的指针、静态方法、接口、多重继承、模板 如果对C#、Delphi等语言熟悉,都知道这些语言支持委托事件的方法使用起来非常方便,并且能够较好的降低类的依赖关系,而C++语言没有集成这种语法,所以要想在C++使用这种事件模式需要开发人员自己来模拟,本文将提供多种模拟的方案,并会分析各自的优缺点,可以在需要的时候有选择的使用。委托事件模式的具体是什么样子的,可以原创 2011-11-21 13:43:56 · 7537 阅读 · 6 评论 -
C++ 中dynamic_cast<>的使用方法
/*这是从网上摘下的例子,主要讲述了 dynamic_cast/* 作用:将一个基类对象指针(或引用)cast到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理, 即会作一定的判断。 对指针进行dynamic_cast,失败返回null,成功返回正常cast后的对象指针; 对引用进行dynamic_c转载 2011-12-15 14:19:02 · 58565 阅读 · 10 评论 -
C++中的单例模式及按需释放模型(一)
关键字:C++、单例模式、友元、模板、多线程、对象生命周期 单例模式是设计模式中最简单最容易理解的模式之一,实用方便,项目设计开发中会被经常使用,但是不知道读者有没有考虑过这个问题,单例模式实例什么时候被释放,读者有兴趣可以仔细分析下,按照目前通常方法实现的单例模式都是直到系统退出的时候才释放的,甚至是有垃圾回收机制的C#上也是这样的,系统切换了功能模块还存在大量的这个模块根本不使用的单例原创 2011-11-28 16:19:21 · 6775 阅读 · 0 评论 -
按需释放单例模型的改进
在《C++中的单例模式及按需释放模型》系列文中已经对按需释放单例模型进行了详细描述,其中也提到了是模仿auto_ptr引入单例类实例获取器来控制单例类实例的生命周期,实现按需施放的,但是没有给出运算符重载的版本,本文对实例获取器给出运算符重载版本,使单例模型使用起来更加容易方便。不多说,直接给出单例类实例获取器的代码 template class Singleton_ptr { p原创 2011-12-05 13:56:35 · 1951 阅读 · 0 评论 -
C++中的单例模式及按需释放模型(四)
三、使用模板类实现的通用单例类实例获取器例子工程的名称是GeneralFreeInstanceGetter。1、通用的模板类单例类实例获取器功能同前文描述的单例类获取器一样,我们改成模板类方式,把单例类作为模板参数,以便变成通用的单例类实例获取器。模板类的定义与实现namespace dpex{ template class SingletonInstanceGette原创 2011-11-29 17:35:22 · 2246 阅读 · 5 评论 -
C++中的单例模式及按需释放模型(二)
一、在C++中实现单例模式例子工程的名称是Singleton。1、模拟C#的方法实现单例模式本人开始学习设计模式也是先看的C#语言描述的,后来要在C++上实现,参考了网上相关文章,使用一个静态类成员的指针来实现单例模式,代码如下:SingletonSimulateGC类定义class SingletonSimulateGC{private: SingletonSimula原创 2011-11-28 17:14:32 · 4508 阅读 · 2 评论 -
C++中的单例模式及按需释放模型(五)
四、多线程安全的通用单例类实例获取器例子工程的名称是SingletonThreadSafeInstanceGetter。刚开始写本文时,本没有想实现多线程版本,主观上以为同通常的单例模式一样,多个多线程同步就可以了,很简单,让读者自己开发就好了,不过后来真正去思考时发现不是那么简单的,感觉对此还是很有介绍的必要。1、单例类实例与单例类实例获取器实例的对应关系在实现多线程安全的通用单原创 2011-11-30 17:20:17 · 3409 阅读 · 0 评论 -
C++中的单例模式及按需释放模型(三)
二、使用辅助类实现按需释放的单例模式例子工程的名称是SingleClassFreeInstanceGetter。1、引入辅助类为什么会想到引入辅助类来实现单例,这个辅助类要实现什么样的功能来辅助,要回答这两个问题,我们还是要先分析前文中要求单例类具有的特点,简单来讲就是2个特点,第一是要单例,第二是要具有生命周期,不能创建了就不管,关于单例研究的已经很多了,没有多少进一步处理的空间了,原创 2011-11-29 14:07:16 · 3064 阅读 · 0 评论 -
在C++中模拟委托事件的方法(六)
最后我们针对这4种比较可行的模拟事件方法进行一下评价,评价的标准主要考虑以下几个方面1、 是否可以只接收事件触发类的一部分事件2、 一个事件触发类是否支持多个事件接收类对象接收事件3、 事件处理函数是否可以使用保护或私有的访问权限,保证事件接收类的封装特性4、 书写方便程度与代码优雅度、简洁程度,对于这个的标准主要是看开发人员开发事件触发类(服务类)和事件接收类的代码简洁程原创 2011-11-22 13:11:52 · 2114 阅读 · 7 评论 -
在C++中模拟委托事件的方法(五)
五、事件链模拟事件对应的例子工程名DelegateChainEvent类模板的方法已经可以比较方便的让不同的对象接收同一个事件触发类的不同事件了,大多数的开发需要都能满足了,不过如果用过C#的人就会看到其中的一些问题,就是事件链的问题,因为C#允许对事件进行”+=”和”-=”的操作,即事件触发类的一个事件是一个事件链,可以挂接多个事件处理方法,当事件触发类这一个事件触发时,可以通知多个事件原创 2011-11-22 13:00:41 · 2941 阅读 · 0 评论 -
在C++中模拟委托事件的方法(四)
三、静态函数方式实现多对象事件接收对应的例子工程名MultiObjectEvent在静态函数模拟事件方法中,如果读者细心的话,会发现类CNotifyClass只包含一个指定对象的成员变量m_pEventParameter,在使用RegisterEvent方法注册接收事件的函数时如果不接收某些事件,就把相应的函数参数设为NULL,但是接收事件的对象参数只能是一个,这样就不能有多个类CRecv原创 2011-11-22 12:40:06 · 2494 阅读 · 0 评论 -
在C++中模拟委托事件的方法(三)
二、接口模拟事件对应的例子工程名InterfaceEvent由于C++不支持接口,但是支持抽象类和多重继承,所以可以通过class或struct模拟实现接口。1、 具体的实现方法(1)、事件触发对象类CNotifyClass的类定义如下:class INotifyClassEvent{public: INotifyClassEvent() {}; virtual ~I原创 2011-11-22 10:46:23 · 2433 阅读 · 1 评论 -
在C++中模拟委托事件的方法(二)
下边来看具体的实现方案 一、静态函数模拟事件对应的例子工程名StaticFunctionEvent1、 具体的实现方法(1)、事件触发对象类CNotifyClass的类定义如下:typedef void (*PEVENT_NOPARAM_NORETURN)(void *);typedef int (*PEVENT_NOPARAM_RETURN)(void *);typ原创 2011-11-22 10:24:29 · 3238 阅读 · 0 评论 -
关于_beginthreadex与AfxbeginThread
比较CreateThread,_beginthreadex与AfxbeginThread的文章已经很多了,介绍的已经很详细,其中比较优秀的有:http://kulong0105.blog.163.com/blog/static/174406191201198104050236/但是一直有个疑问如果在线程中既可能使用MFC库,也可能使用C Run-time Library,这时应该使原创 2013-11-12 15:57:01 · 5154 阅读 · 2 评论