博文

自动为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开发的。目......

阅读全文(2459) | 评论:0

游戏参考(2013-07-29 10:43:00)

摘要:http://blog.sina.com.cn/u/3629839257......

阅读全文(1365) | 评论:0

地形(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

......

阅读全文(3533) | 评论:0

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)。
    &......

阅读全文(12440) | 评论:1

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/ 可以找到。 其中新增加的部分有: ......

阅读全文(10234) | 评论:8

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)&......

阅读全文(5405) | 评论:0

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、探索节点前进......

阅读全文(1483) | 评论:0

游戏代码下载(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/   ......

阅读全文(1419) | 评论:1

存储过程执行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;   ......

阅读全文(1341) | 评论:0

placement new(2012-01-05 10:36:00)

摘要:有关placement new
                                             hzh512
&#61656;    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)&......

阅读全文(1825) | 评论:0