在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
[namespace] 1 namespace nsTest1 2 { 3 int nsAdd(int a, int b) 4 { 5 return a + b; 6 } 7 } 8 9 namespace nsTest2 10 { 11 int nsAdd(int a, int b) 12 { 13 return a + b; 14 } 15 } 有如上代码ns.h, 如果直接用swig导出, 则会报命名冲突的错误。需要用rename进行特殊处理, 如下: //防止命名冲突错误。
[宏]
[typedef] 有头文件typedef_.h 1 typedef float hkFloat32; 2 3 typedef hkFloat32 hkReal; 如果在swig的导出接口中用到如上定义, 如: 1 inline hkReal _myAdd(hkReal a, hkReal b) 2 { 3 return a + b; 4 } 则swig无法识别hkReal。可用如下的办法解决: //用于告诉swig hkReal的定义 [template] 1 template<typename T> 2 T testAdd(const T &a, const T &b) 3 { 4 return a + b; 5 } 用如下办法导出需要导出的类型: %template(testAdd_int) testAdd<int>; %template(testAdd_float) testAdd<float>;
[overload] 要看脚本语言是否支持重载, 如果不支持, swig只会导出第一个接口, 其他的重载接口会被忽略。 [默认参数]
[copy constructor] 因为as3本身是没有拷贝构造函数的概念, 而swig会把c++的copy constructor生成一个对应function wrapper, 但是没有名称, 所以之后编译.as文件会报错。解决方法: 直接在.i文件中ignore掉copy constructor. [operator] 官方文档上说swig对待操作符重载, 就如同对待一个普通函数, 但是导出的接口类似于operator +, 这种形式在大部分的脚本语言中都是非法的函数命名, 所以为了解决这个问题, 依然可以用%rename进行解决。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论