- 博客(5)
- 资源 (2)
- 收藏
- 关注
原创 thunk原理
<br /> <br />通常程序执行的都是代码段上的二进制流,堆栈上存储了函数调用过程中用到的变量,EIP很少有机会能指到堆栈上来,但是使用thunk技术可以在堆栈上以数据的形式加入一段可执行代码,并通过函数调用执行。就像这样:<br /> <br />#include <iostream> #include <windows.h> using namespace std; #pragma pack(push, 1) class Thunk { public: unsigned char
2011-01-22 22:42:00 607
原创 modern c++ design01
<br /> <br />基于Policy的Class设计<br /> <br /> <br />软件设计的核心理念是设计原则,设计原则讲的是为了使软件易维护,易扩展同时保持健壮性的一些“公理”。之所以说是公理是因为它是软件行业诞生以来的若干人经验的积累,经过检验符合客观实际,我猜也许最根本的是符合人们的思维习惯和认知规律。<br /> <br />同许多公理一样,软件设计的公理(设计原则)也是内涵简洁,外延无限大的东西。乍看之下很容易盲从,如果没有那么多的设计模式来支撑它,我们对它的认识也许永远只停留在内
2011-01-20 01:07:00 582
原创 modern c++ design系列
<br /><br /><modern c++ design>是我学C++以来一直仰视的书,之所以说仰视是因为里面对模板的使用可以用匪夷所思来形容,它同时结合了另一门让我仰视的技术——设计模式,仰视+仰视=崇拜,所以长久以来我一直没有把它读懂的信心。但它就在我手边,心里一直都惦记着它,经过两年多的工作积累,今天已经可以翻一翻它了,虽然还是有很多的绊脚石,但勉强可以继续下去。初读一遍已经能理解所要表达的意思,能体会到它的好处,能明白涉及到的知识点,我想书读到这里离读懂也就不算太远了。<br />对于一个陌生
2011-01-20 00:41:00 746 1
原创 动态创建2
<br />上一篇提到了一种“分散式”型别保存方式,即每个具体产品里面保存了型别信息。类似于MFC的CRuntimeClass。这样做的缺点就是不容易管理,类别分布在各个类中,如果中间某个链接“断裂”,那么有可能导致整个型别网不可用。<br /> <br />在Modern C++ Design中提到了一种使用工厂来管理所有类别的解决方案,类别都保存在一个map里,每个具体的产品类向该工厂注册。创建对象时通过调用CreateObject(int iTypeID)就可以得到相应的类别。同前一种比起来,这种方法
2011-01-10 18:12:00 327
原创 动态创建1
如果把对象保存在文件上,读取的时候就会面临一个问题,如何解析文件中的数据?怎样才能把文件中的数据和具体的型别对应起来?这就是动态创建问题。最直接的想法是给每个类一个编号。假如有三个类,CDuckClass, CCockClass, CMonkeyClass他们都派生自CRootClass,下面是一种可行的方案。void LoadFile(char* pszFileName) { ifstream infile(pszFileName); int iType; infile >> iTyp
2011-01-08 21:33:00 257
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人