- 博客(189)
- 资源 (4)
- 收藏
- 关注
原创 万能数据类型any杂谈
万能数据类型boost::any杂谈1、boost::any 与 _variant_t刚接触boost::any时,不禁让人想起了MS的_variant_t类,因为两者都可以存放其他的类型的值。比较一下两者可以发现:_variant_t只能容纳 VARIANT 数据类型(详见MSDN),而boost::any可以容纳用户自定义数据类型,如结构体,类等,这由两者的实现方法不同造成的: _varian
2005-06-16 10:49:00 4059
原创 Boost编译一步步来
Boost编译一步步来 1、下载 下载boost-jam-3.1.10-1-ntx86.zip,并解压到boost文件夹下,如E:/boost_1_32_0/ 2、设置Python目录 用记事本打开E:/boost_1_32_0下的Jamrules文件,在文件末尾加入Python的版本和目录配置项,假如Python所在的目录为E:/Python24,则更改后如下所示 : # The current
2005-06-14 21:31:00 3050 3
原创 游戏状态管理之C++实现
游戏状态管理之C++实现Managing Game States in C++ 文章来源:TonyandPaige.com翻译: Mythma 多年前看的一个demo使我第一次完全明白了游戏中的不同状态。这个demo能够从一个特效平滑的过渡到另一个特效,并能从2D漩涡效果直接过渡到3D渲染环境,就像是几个不同的程序写成的。 多状态不仅在demo中重要,在游戏中也同样重要。每个游戏程序基本上都是从介
2005-05-01 16:18:00 7570 1
原创 战争又起
战争又起昨晚,机械与美视之间又爆发了战争。美视电影学院是学校里较小的学院,是我入校那一年成立的,至今已有近5个春秋。机械学院是学校里最大的学院,有几千人。但自从美视电影学院成立以来,她和机械学院之间的战争就没有停息过。局部战争且不说,就大规模战役(群殴),我见到的这已是第三次。我没有弄清楚他们之间有什么解不开的疙瘩。或许美视看机械太大,不顺眼?或许机械看美视MM比机械的质量好,不平衡?或许都是年轻
2005-04-27 09:34:00 1351
原创 Item 40. RAII
Item 40. RAIIwhats RAII?resource acquisition is initialization需要时才定义
2005-04-26 20:42:00 1093
原创 今天,我踩到GS了
今天,我踩到GS了昨天晚上寝室里多了一个新"成员"——一只小狗,是室友带回来的。当看到它的第一眼起,我就在寻思它什么时候离开,尽管它看起来挺可爱。是的,我不喜欢狗,确切的说是我不喜欢寝室里有狗。终于,我担心的事情果然发生了。夜里它安静下来,叫得很凄惨。而我理所当然就被吵醒了若干次。每次都想,再叫我就把你炖着吃了。可还是我想我的,它叫它的,大家都没睡好。迷糊中听到闹钟响了。Kao!第一节还有英语课
2005-04-25 21:37:00 1422 1
原创 Item 39. 异常安全之函数(Exception Safe Functions)
Item 39. Exception Safe Functions编写异常安全代码的难点不在于抛出和捕获异常,而是在于抛出和捕获之间要做的事情。当异常从抛出到达捕获语句的过程中,这期间执行的函数在弹栈前需要清理它所使用的任何资源。通常,这就需要片刻的思考以及一些常识。以String的赋值操作为例: String &String::operator =( const char *str ) {
2005-04-22 15:50:00 1538
原创 在等待的日子里
在等待的日子里度日如年,在等待的日子里心如止水。曾试问过自己:为何不去争取而选择等待?我只能无奈的说:因为我怕她受到伤害,更怕自己再受伤!曾嘲讽过自己:这样等待有用吗?我只能笑笑说:我只求有始有终,即便不是善始善终。在等待的日子里我在静静地等待,因为我知道:会来的终究会来,不会来的强求也没用。在等待的日子里我在傻傻地等待,因为我还有希望:一定会有一个结局的,哪怕是个悲剧。
2005-04-22 13:06:00 1191
原创 Item 38. 异常安全之公理(Exception Safety Axioms)
Item 38. Exception Safety Axioms公理,公认之理,无需证明。要证明一个欧几里得几何的定理,要借助于一系列的公理。要判断代码是否是异常安全,也有一系列的公理可以借用。------------------------------------------------------1、异常是同步的 Exceptions Are Synchronous异常是同步的,只能在函数调用
2005-04-22 11:10:00 1634
原创 Item 37. 数组分配(Array Allocation)
Item 37. Array Allocation分配内存时用new,则释放时用delete; 分配时用new[],则释放时用delete[]。T *aT = new T; // non-arrayT *aryT = new T[12]; // arraydelete [] aryT; // arraydelete aT; // non-array-------------------------
2005-04-22 10:30:00 1430
原创 给char*一个名份
给char*一个名分char* 不停的问自己:我是字符串还是指针?谁能给我一个名份?先看如下程序:char* GetName(int nID){ if(nID > 0) return "Name"; else return NULL; }const char* GetConstName(int nID){ if(nID > 0) return "Name"; else return NUL
2005-04-19 16:22:00 2243 3
原创 Item 36. Class-Specific Memory Management
Item 36. Class-Specific Memory Management在类中声明operator new 和 operator delete 成员就可以实现类自己的内存分配与管理。class Handle { public: //... void *operator new( size_t ); void operator delete( void * );
2005-04-17 16:23:00 1197
原创 Item 35. Placement New
Item 35. Placement New 看起来不可能的事情在C++中总能找到解决的办法。正如,直接调用构造函数是不可能的,然而可以用placement new 欺骗编译器调用构造函数。--------------------------------------------------1、placement new 为何物?placement new 是重载operator new 的一个标准
2005-04-17 16:09:00 1328
原创 有感本命年
从没有在意过本命年,更没有在意过鸡年的本命年——我的本命年。前不久跟室友们闲谈时,不知是如何谈论起了这个问题。由于我们几个都是属鸡的,再加上有一个是“算命专家”,所以这个问题就扯了很久。我也趁机了解了很多“知识”——迷信的知识。他说,本命年里会发生很多意外的事情,或喜或悲,要多留意。对于星座、属相与命运这类的言论,以前没有过多留意,也总是一笑了之。而如今,确切的说是最近,我却在问自己,今年在我身上
2005-04-16 21:41:00 1379
原创 Item 34. Restricting Heap Allocation
Item 34. Restricting Heap Allocation1、什么情况下要限制堆分配?假如一个句柄对象("handle" object )维护了一个体对象("body" object)的引用数量,就需要确保对象的析构函数调用。局部对象和静态对象能够自动调用其析构函数,而堆分配的对象需要显式地调用析构函数。这样确保这个特殊类的对象不能进行堆分配是个不错的注意。2、如何限制堆分配?cla
2005-04-16 15:09:00 1108
原创 Item 33. 抽象基类模仿秀(Manufacturing Abstract Bases)
Item 33. Manufacturing Abstract Bases抽象基类描述了一个问题的抽象概念,它不能被实例化。class ABC { public: virtual ~ABC(); virtual void anOperation() = 0; // pure //...};一个类中有了一个纯虚函数就成为了抽象类,编译器可以保证ABC不能实例化。有时候一个类没有候
2005-04-16 12:13:00 1310
原创 Item 31. Covariant Return Types & Item 32. Preventing Copying
Item 31. Covariant Return TypesCovariant:随变,随动。(你变我就变)通常,一个overriding函数必须与所重写的函数具有相同的返回类型。然而,并非事事如此,Covariant Return Types便是无需如此。如下的继承体系:class Shape { public: //... virtual Shape *clone() const
2005-04-15 17:32:00 965
原创 Item 29. Virtual Constructors and Prototype&Item 30. Factory Method
Item 29. Virtual Constructors and PrototypeVirtual Constructors?C++没有Virtual Constructors这个概念。但有的情况下又需要这个功能,即在多态的时候能够创建出一个跟指针的动态类型相同的一个对象。既然是多态就要考虑虚函数,在虚函数中调用构造函数不就行了么?是的,这就是设计模式中的Prototype的解决方案:一个clo
2005-04-15 17:26:00 922
原创 Item 28.话说指针比较(Meaning of Pointer Comparison)
Item 28. Meaning of Pointer Comparison一个对象可能有多个有效的地址(本身的指针和指向基类的指针),假若有多个指针指向它,这些指针的指向就可能不同。那么在对这些指针做比较时,是对指针指向对象的地址作比较?还是对指针指向对象的标识作比较呢?例如:class Shape { ... };class Subject { ... };class ObservedBlob
2005-04-15 12:07:00 1306
原创 Item 27. 能力质询(Capability Queries)
Item 27. Capability Queriesclass Shape { public: virtual ~Shape(); virtual void draw() const = 0; //...};class Rollable { public: virtual ~Rollable(); virtual void roll() = 0;};class
2005-04-15 10:48:00 1209 1
原创 Item 26. Operator Function Lookup
Item 26. Operator Function Lookup 有时候Operator Function看起来像是成员操作符函数overload一个非成员操作符,但事实并非如此。这不是overloading,只是一种不同的查找算法。class X { public: X operator %( const X & ) const; // binary modulus X memF
2005-04-15 10:17:00 1021
原创 Item 25. Argument Dependent Lookup
Item 25. Argument Dependent Lookupnamespaces对于C++程序和设计有很深的影响。它的Argument Dependent Lookup(ADL)特性非常重要,尽管潜在的增加了程序的复杂性,但它所解决的问题远比它引入的要多。ADL的思想很简单:当在函数调用表达式中查找函数的名字,编译器同时会检查函数参数类型所在的namespaces。eg:namespace
2005-04-14 21:37:00 1187
原创 Item 24. 成员函数的查找(Member Function Lookup )
Item 24. Member Function Lookup 当调用一个成员函数时,涉及到三个步骤:1)编译器寻找函数名2)从有效的候选函数中选出最匹配的3)核对选出的函数与要访问的函数从这个角度理解如下代码:class B { public: //... void f( double );};class D : public B { void f( int );};//..
2005-04-14 19:08:00 1188 1
原创 Item 22. 模板方法与曲线救国(Template Method)
Item 22. Template Method敬告Template Method 与 C++中的templates毫不相干,它只是一种设计方法(亦或设计模式)。------------------------1、Template Method设计的目的Template Method是用于基类设计的一种方法,它使得子类的任务更加清晰,让子类设计者的注意力集中于基类的contract是如何实现的,而
2005-04-14 11:41:00 1114
原创 21.重载与重写(Overloading and Overriding Are Different)
Item 21. Overloading and Overriding Are DifferentOverloading : 重载Overriding :重写1、Overloading 与 Overriding 是两个不同的概念Overloading 是指在同一个作用域中有两个或多个函数拥有相同的名字不同的签名。函数的签名包括:参数的数量和类型,const属性。当编译器发现存在一个以上的具有相
2005-04-14 10:20:00 1190
原创 18函数对象&19command模式20函数对象在STL中的应用
Item 18. Function ObjectsItem 19. Commands and HollywoodItem 20. STL Function Objects1、unction Objects是什么函数对象听起来挺吓人,其实并不神秘,它也是一个类的对象,只不过该类重载了操作符(),使得对象使用以来跟函数一样。class Fib { public: Fib() : a0_(1),
2005-04-14 10:10:00 1165 1
原创 Item 17. 函数与数组声明上的比较
Item 17. Dealing with Function and Array Declarators函数与数组的声明能够放在一起来比较,是因为它们有相同的遭遇,同是天涯沦落人。------------------------------------------------------------------1、两种函数声明例如: int *f1(); // 返回类型为int* 的函数 int
2005-04-13 20:49:00 1063
原创 Item 16. 指向成员函数的指针
Item 16. Pointers to Member Functions Are Not Pointers Pointers to Member Functions :指向成员函数的指针 在此,成员函数指的是非静态的成员函数。 Pointers to state Member Functions Are Pointers -----------------------------------
2005-04-13 14:51:00 1138
原创 Item 15.指向类数据成员的指针
Item 15. Pointers to Class Members Are Not PointersPointers to Class Members:指向类成员的指针注:本条中只涉及到非静态的数据成员--------------------------------------------------------1、类成员的指针之声明: class C { public: //...
2005-04-13 11:20:00 1082
原创 Item 14. 函数指针(Function Pointers)
Item 14. Function Pointers函数指针的声明: void (*fp)(int); //括号不能省略,去掉则为返回类型为void*使用: 1、当初始化或赋值函数指针A的地址给函数指针B,无需显式的取函数的地址,编译器会为你做: extern void h( int ); fp = h; // OK, 指向 h fp = &h; // OK 2、当调用函数指针时,也
2005-04-12 10:10:00 1082
原创 Item 13. 拷贝操作(Copy Operations )
Item 13. Copy Operations 拷贝构造函数和拷贝赋值符是不同的操作,但在类中,他们应该成对声明。
2005-04-12 09:49:00 1088
原创 Item 12. 赋值和初始化(Assignment and Initialization Are Different)
Item 12. Assignment and Initialization Are Different是的,赋值(Assignment)与初始化(Initialization)不同,这归因于他们调用不同的函数 赋值: operator = 操作符 初始化: 拷贝构造函数--------------------------------------------------------------
2005-04-11 20:14:00 1184
原创 Item 11. 编译器对类的影响(The Compiler Puts Stuff in Classes )
Item 11. The Compiler Puts Stuff in Classes 不同的编译器对于class的实现不一定相同,比如虚函数表指针的位置,有的放在类头部,有的则放在类尾部。
2005-04-11 19:13:00 1022
原创 Item 10.const成员函数 (Meaning of a Const Member Function)
Item 10. Meaning of a Const Member Function1、何谓const成员函数: 成员函数名字后面有个const2、const成员函数与non-const成员函数的区别: 区别在于成员函数中的那个看不见的this指针的类型: non-const成员函数里this的类型是 X* const,即一个指向不变的this指针 const 成员函数里this的类型是con
2005-04-11 19:10:00 1532
原创 Item09. 强制转换(New Cast Operators)
Item09. New Cast Operatorsconst_cast :去const修饰符,把const变量变为非const的static_cast : 不同类型(type)的变量之间的强制转换dynamic_cast :在继承层次中,向下类型转换reinterpret_cast:随意转换。---------------------------1、static_cast 虽然可以用来进行向下类
2005-04-10 19:51:00 1176
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人