博文
自动为C++类生成luabind api(转)(2013-12-23 11:25:00)
摘要:
自动为C++类生成luabind api
发表于2012 年 7 月 24 日由kid
在我的上一篇日志中提到使用luabind来导出C++类会很方便,但是通常来说,一个类中都会有几十个函数需要被导出,而我们手头上往往有几十个这样的类。如果要人工去一个一个为它们写导出API,那将会是一件十分令人崩溃的事情!对于boost::python来说,有一个现成的工具(具体叫什么名字请询问亮哥…)。但luabind就没有这般幸运了~所以我决定自己写一个。
我最初的做法是完全使用正则表达式来匹配各种类和函数,花了一整天时间做出来一个有着许多错误,但经过人手动修改修改也勉勉强强能用的版本。在这个过程中我深深地了解到了从“还不错”到“完美”之间存在着多大的鸿沟。这让我下定决心要用词法分析的做法重新写一个。但是C++的词法何其复杂,如果要自己手写一个那就实在是太浪费时间了!经过亮哥指点,我使用clang作为词法分析器,并使用其python包装,完成了为C++自动生成luabind api的第一个版本。
工具github地址:https://github.com/kidsang/LuabindAutoWrap
因为我已经把clang的dll也放在了仓库里,所以理论上来说,只要下载下来就可以用了。这是个使用python写成的工具,所以为了使用它你首先需要下载安装python2.7
源码主要有三个文件,其中parse.py负责调用clang的函数对文件进行分析,construct.py负责输出格式化后的api代码,autowrap.py是一个调用工具进行api包装的例子。
目前版本为0.1,主要的功能是为C++的类导出luabind api。其中包含了以下缺陷:
不支持静态成员函数,事实上,它会把它们当做非静态的函数导出,需要手动去删……
不支持运算符重载,并且不会进行导出。
不支持成员函数重载,会导出多个重复的api,需要手动去删……
这些缺陷我会慢慢地改进。之所以是“慢慢地”,主要原因是这个工具主要是我写给自己用,为了辅助SaberCore开发的。目......
地形(2013-07-19 11:13:00)
摘要:http://download.csdn.net/detail/ben_shan_/2151970
http://download.csdn.net/detail/nhewrc/2676560
http://blog.csdn.net/nasi00/article/details/335474
http://dev.gameres.com/Program/Visual/3D/SceneDesign.mht
http://download.csdn.net/detail/niyongfu14/3442975
http://blog.csdn.net/pizi0475/article/details/6445087
http://blog.csdn.net/qq18052887/article/details/9139553
http://download.csdn.net/detail/ZeewenDotNet/728361
好
http://bbs.csdn.net/topics/390340232
http://download.csdn.net/detail/yibing55555/2684398
http://download.csdn.net/detail/zddmail/4264810
http://download.csdn.net/download/zddmail/4309418
......
32位和64位系统区别及int字节数(转)(2013-05-23 15:14:00)
摘要:一)64位系统和32位有什么区别?
1、64bit CPU拥有更大的寻址能力,最大支持到16GB内存,而32bit只支持4G内存
2、64位CPU一次可提取64位数据,比32位提高了一倍,理论上性能会提升1倍。但这是建立在64bit操作系统,64bit软件的基础上的。
什么是64位处理器?
之所以叫做“64位处理器”,是因为电脑内部都是实行2进制运算,处理器(CPU)一次处理数据的能力也是2的倍数。8位处理器、16位处理器、32位处理器和64位处理器,其计数都是2的倍数。一次处理的数据越大,该电脑处理信息的能力越来越大;因此64位处理在先天就比32位处理器具有快速的能力。那为什么不用更高级的128位处理器呢?因为位数越高,处理器芯片的设计也就越复杂,目前的技术水平暂时无法制造这么复杂的芯片。
64位处理器之失
※硬件———缺乏驱动程序,很多现有硬件无法使用
※软件———操作系统不是问题,但是软件出现不兼容难题
64位处理器之得
※硬件———更快的执行速度,更大的内存管理
※软件———最新的尖端软件首先出现在64位平台
(二)数据类型对应字节数
程序运行平台
不同的平台上对不同数据类型分配的字节数是不同的。
个人对平台的理解是CPU+OS+Compiler,是因为:
1、64位机器也可以装32位系统(x64装XP);
2、32位机器上可以有16/32位的编译器(XP上有tc是16位的,其他常见的是32位的);
3、即使是32位的编译器也可以弄出64位的integer来(int64)。
&......
C++ 反射(2012-08-09 17:21:00)
摘要:
C++ 的“反射”技术
Lit Window Library
来自http://sourceforge.net/projects/litwindow 大概看了一下,使用了宏建立了一个比较复杂的数据结构,用来提供成员反查以及成员访问。
tinybind
来自http://sourceforge.net/projects/tinybind/ 这个应该不算是反射,不过通过了定义一个Binding函数实现成员和XML的Element之间的绑定,自动实现了XML<->class,对实现C++的“反射”也有一定的参考作用。
OODBC
来自http://www.garret.ru/~knizhnik/cpp.html 这个也应该不算是反射,也是通过宏建立一个记录成员变量在类中的偏移位置的链表。自动实现数据库字段与成员的绑定,有点Hibernate的味道。呵呵。同时,作者提供的另外几个例如FastDB、GigaBase、goods、POST++都使用了类似的技术。
http://www.codeproject.com/library/libreflection.asp
AGM::LibReflection: A reflection library for C++.
用的是宏,不过实现出来的东西比较有“反射”的味道,而且只需要一个头文件就足够了。不知道g++下表现如何,有空要研究研究。
boost出了1.32,去 http://boost.c-view.org/ 可以找到。
其中新增加的部分有:
......
windows下vim和Doxygen自动生成代码文档(转)(2012-07-24 09:55:00)
摘要:
本文转自:http://blog.ixpub.net/597712/viewspace-423724
1. 下载DoxygenToolkit 下载地址:http://www.vim.org/scripts/script.php?script_id=987
2. 把DoxygenToolkit.vim放入../Vim/vim72/plugin
3. 修改_vimrc的配置,我的配置是
let g:DoxygenToolkit_paramTag_pre="@param "
let g:DoxygenToolkit_returnTag="@returns "
let g:DoxygenToolkit_blockHeader="--------------------------------------------------------------------------"
let g:DoxygenToolkit_blockFooter="----------------------------------------------------------------------------"
let g:DoxygenToolkit_authorName="Leon Lee"
4. 使用命令
DoxAuthor:将文件名,作者,时间等关键字自动填好
DoxLic:license注释
Dox:函数及类注释
5、使用Doxygen的一般步骤
a) 下载 Doxygen软件(本人Cygwin自带该软件)
b)&......
A*(2012-06-28 20:10:00)
摘要:
http://www.cnblogs.com/gzwlj/archive/2011/02/24/1963760.html
一种高效的寻路算法 - B*寻路算法
在此把这个算法称作B* 寻路算法(Branch Star 分支寻路算法,且与A*对应),本算法适用于游戏中怪物的自动寻路,其效率远远超过A*算法,经过测试,效率是普通A*算法的几十上百倍。
通过引入该算法,一定程度上解决了游戏服务器端无法进行常规寻路的效率问题,除非服务器端有独立的AI处理线程,否则在服务器端无法允许可能消耗大量时间的寻路搜索,即使是业界普遍公认的最佳的A*,所以普遍的折中做法是服务器端只做近距离的寻路,或通过导航站点缩短A*的范围。
算法原理
本算法启发于自然界中真实动物的寻路过程,并加以改善以解决各种阻挡问题。
前置定义:
1、探索节点:为了叙述方便,我们定义在寻路过程中向前探索的节点(地图格子)称为探索节点,起始探索节点即为原点。(探索节点可以对应为A*中的开放节点)
2、自由的探索节点:探索节点朝着目标前进,如果前方不是阻挡,探索节点可以继续向前进入下一个地图格子,这种探索节点我们称为自由探索节点;
3、绕爬的探索节点:探索节点朝着目标前进,如果前方是阻挡,探索节点将试图绕过阻挡,绕行中的探索节点我们成为绕爬的探索节点;
算法过程
1、起始,探索节点为自由节点,从原点出发,向目标前进;
2、自由节点前进过程中判断前面是否为障碍,
a、不是障碍,向目标前进一步,仍为自由节点;
b、是障碍,以前方障碍为界,分出左右两个分支,分别试图绕过障碍,这两个分支节点即成为两个绕爬的探索节点;
3、绕爬的探索节点绕过障碍后,又成为自由节点,回到2);
4、探索节点前进......
游戏代码下载(2012-06-19 19:55:00)
摘要:
http://www.89ye.com/forum.php
http://www.discuz.net/forum.php?mod=forumdisplay&fid=32
http://www.webgamei.com/
......
存储过程执行sql语句(2012-05-29 19:51:00)
摘要:
SET @xx="name,bm";
SET @sql1 = CONCAT('select ',@xx,' from people');
prepare s1 from @sql1;
execute s1;
deallocate prepare s1;
......
placement new(2012-01-05 10:36:00)
摘要:有关placement new
hzh512
 placement new的含义
placement new 是重载operator new 的一个标准、全局的版本,它不能够被自定义的版本代替(不像普通版本的operator new 和 operator delete能够被替换)。
void *operator new( size_t, void *p ) throw() { return p; }
placement new的执行忽略了size_t参数,只返还第二个参数。其结果是允许用户把一个对象放到一个特定的地方,达到调用构造函数的效果。
和其他普通的new不同的是,它在括号里多了另外一个参数。比如:
Widget * p = new Widget; - - - - - - - - - //ordinary new
pi = new (ptr)&......