博文

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

阅读全文(1269) | 评论:0 | 复制链接

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

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

阅读全文(690) | 评论: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

......

阅读全文(2851) | 评论: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)。
    &......

阅读全文(9677) | 评论:1 | 复制链接

用宏区分操作系统和编译器(转)(2013-05-23 14:48:00)

摘要: 原文地址: http://blog.chinaunix.net/uid-24520020-id-2976765.html   编码的时候经常要用到条件编译,每次都到网上去查比较浪费时间,今天总结一下以备后用
编译器 GCC
#ifdef __GNUC__ #if __GNUC__ >= 3 // GCC3.0以上 Visual C++
#ifdef _MSC_VER(非VC编译器很多地方也有定义) #if _MSC_VER >=1000 // VC++4.0以上 #if _MSC_VER >=1100 // VC++5.0以上 #if _MSC_VER >=1200 // VC++6.0以上 #if _MSC_VER >=1300 // VC2003以上 #if _MSC_VER >=1400 // VC2005以上 Borland C++
#ifdef __BORLANDC__ UNIX UNIX
#ifdef __unix
or
#ifdef __unix__ Linux
#ifdef __linux
or
#ifdef __linux__ FreeBSD
#ifdef __FreeBSD__ NetBSD
#ifdef __NetBSD__ Windows 32bit
......

阅读全文(2415) | 评论:1 | 复制链接

非阻塞Connect对于select时应注意问题(转)(2012-11-01 12:09:00)

摘要:对于面向连接的socket类型(SOCK_STREAM,SOCK_SEQPACKET)在读写数据之前必须建立连接,首先服务器端socket必须在一个客户端知道的地址进行监听,也就是创建socket之后必须调用bind绑定到一个指定的地址,然后调用int listen(int sockfd, int backlog);进行监听。此时服务器socket允许客户端进行连接,backlog提示没被accept的客户连接请求队列的大小,系统决定实际的值,最大值定义为SOMAXCONN在头文件<sys/socket.h>里面。如果某种原因导致服务器端进程未及时accpet客户连接而导致此队列满了的话则新的客户端连接请求被拒绝(在工作中遇到过此情况,IONA ORBIX(CORBA中间件)由于没有配置超时时间结果在WIFI网络中传输数据出现异常情况一直阻塞而无机会调用accept接受新的客户请求,于是最终队列满导致新的客户连接被拒绝)。

  调用listen之后当有客户端连接到达的时候调用int accept(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict len);接受客户端连接建立起连接返回用于连接数据传送的socket描述符,进行监听的socket可以用于继续监听客户端的连接请求,返回的socket描述符跟监听的socket类型一致。如果addr不为NULL,则客户端发起连接请求的socket地址信息会通过addr进行返回。如果监听的socket描述符为阻塞模式则accept一直会阻塞直到有客户发起连接请求,如果监听的socket描述符为非阻塞模式则如果当前没有可用的客户连接请求,则返回-1(errno设置为EAGAIN)。可以使用select函数对监听的socket描述符进行多路分离,如果有客户连接......

阅读全文(3841) | 评论:0 | 复制链接

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

阅读全文(8119) | 评论: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)&......

阅读全文(4405) | 评论:0 | 复制链接

linux下递归删除目录下所有指定类型文件(2012-07-07 17:38:00)

摘要: find . -name '*.exe' -type f -print -exec rm -rf {} \; (1) "."    表示从当前目录开始递归查找 (2) “ -name '*.exe' "根据名称来查找,要查找所有以.exe结尾的文件夹或者文件 (3) " -type f "查找的类型为文件 (4) "-print" 输出查找的文件目录名 (5) 最主要的是是-exec了,-exec选项后边跟着一个所要执行的命令,表示将find出来的文件或目录执行该命令。      exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个\,最后是一个分号 ......

阅读全文(3550) | 评论:0 | 复制链接

AI网站(2012-07-07 09:31:00)

摘要:http://www.aisharing.com/......

阅读全文(1104) | 评论:0 | 复制链接