C++
rickone2009
C/C++ Lua 游戏
展开
-
让std::map::operator[]变聪明
std::map::operator[]是一个设计得很磋却很好用的接口,看下面的例子:#include #include using namespace std;int main(){ map iiMap; iiMap[1] = 2; ---------------------------(1) iiMap[2]; --------------------------------(2) cout return 0;}operator[]的语义是说:我先查一下这个key,如果没有就先插入一个pai原创 2010-07-31 03:48:00 · 1356 阅读 · 3 评论 -
初始化顺序问题
有时候会写一个专门用于构造的类,它只有一个构造函数,然后在里面写点东西,做点事情,然而在里面会引用其它的全局变量,这时候会有初始化顺序问题,很有可能这时候目标还没有初始化出来,对于这样的全局单身变量封一层函数,然后做为静态变量传回。MyObj* GetObjInstance(){ static MyObj s_my_obj; return &s_my_obj;}刚刚遇到一个类似问题,多亏vc报的错,在linux下直接启动,只会简单报一个‘段错误’,用gdb调试也看不出所以然。原创 2010-08-20 00:09:00 · 271 阅读 · 0 评论 -
对象序列化和rtti
以前以为序列化和rtti没什么关系,其实关系密切。先说序列化,序列化是将对象转化成字节流数据,以便进行数据传输和存储,最简单的直接的说法就是‘存盘’,玩个单机游戏,玩着玩着存个盘,游戏里的主角,npc,地图各种游戏元素,以某种方式存储到文件中,只不过单说序列化不讲介质,从对象变成二进制数据流,就是序列化。序列化的目的是为了,在将来某个时刻反序列化,从字节流数据转化成对象,继续之前的某个软件应用。rtti大致是说,在运行时识别动态类型信息,没有rtti,反序列化的过程大致像这样:拿到一段字节数据=>分析某个公原创 2010-08-20 00:39:00 · 645 阅读 · 1 评论 -
VC2005下查看预处理器宏展开结果
gcc -E选项可以查看预编译结果,同样在VC下,把C/C++-》预处理器-》生成预处理文件 勾上也可以,但是你rebuild时会发现报一个Link错误说找不到stdafx.obj文件,这很正常,不要惊慌,VC只做了预处理,所以自然没有.obj文件,只不过它的连接器不应该报这个错罢了,在.cpp的同目录下可以找到对应的.i文件。展开前,建议把系统头文件注掉,不然结果文件很大很大,你不知道你想看的部分展开在哪了。原创 2010-09-09 23:43:00 · 1168 阅读 · 0 评论 -
单身对象的安全构造
<br />单身对象可以泛指一些系统需要保存的中间状态,通常如果一个接口函数,如果里面保存有状态,则可以认为存在着一个单身对象。<br /> <br />单身对象在任何情况下,只能构造一次,构造的过程在什么时候做,是非常讲究的,你如果提供初始化函数,比如WinSocketAPI的初始化函数WSAInit,那你要自己控制好调用顺序,确保它先于其它API的调用之前被调用。<br /> <br />有一种简单做法,结果是这样的,在第一次调用应用接口的时候初始化,反初始化就不做了,不反初始化的原因是,它是单身,它的原创 2010-12-03 01:04:00 · 397 阅读 · 0 评论 -
VC下的预编译头文件设置
VC2005为例创建WIN32工程,选空项目,项目建立后甚至连stdafx.h都没有,添加stdafx.h和stdafx.cpp,随便写点啥,选择工程属性,C/C++,预处理头,创建/使用预处理头 项选择‘使用预处理头’,添加Main.cpp,写上一个简单的WinMain函数,再对stdafx.cpp点右键选属性,C/C++,预处理头,创建/使用预处理头 项选择‘创建预处理头’,记得上述设置对debug和release都做一下,完成后按F7完成。原创 2010-10-19 20:25:00 · 692 阅读 · 0 评论 -
VS2010编译报错 指向$(WindowsSdkDir)include/objidl.h C2061 __RPC__out_xcount_part未定义
<br />http://social.msdn.microsoft.com/Forums/en-US/windowssdk/thread/a47e4fe8-7b3f-45fc-83ee-6bd225213eb9<br /> <br />在VS2010中工具 选项配置里不能设全局路径设置了,打开项目属性,VC++目录,在$(DXSDK_DIR)..前面加上$(WindowsSdkDir)..对应设置,包括include,lib和bin,立即编译生效。原创 2010-10-25 14:15:00 · 2671 阅读 · 0 评论