C++混合编程之idlcpp教程Python篇(9)
上一篇在这 C++混合编程之idlcpp教程Python篇(8)
第一篇在这 C++混合编程之idlcpp教程(一)
与前面的工程相比,工程PythonTutorial7中除了四个文件PythonTutorial7.cpp, Tutorial7.cpp, Tutorial7.i, tutorial7.py 外,Tutorial6.cpp也被加入了此工程中。其中PythonTutorial7.cpp的内容基本和PythonTutorial6.cpp雷同,不再赘述。首先看一下Tutorial7.i的内容:
- #import "Tutorial6.i"
- namespace tutorial
- {
template<T>- struct Ray3
- {
- Ray3();
- Ray3(const Vector3<T>& origin, const Vector3<T>& direction);
- void getPoint(Vector3<T>& point, T t) const;
- Vector3<T> getPoint(T t) const;
- Vector3<T> m_origin;
- Vector3<T> m_direction;
- };
- export Ray3<float>;
- export Ray3<double>;
- typedef Ray3<float> Ray3f;
- typedef Ray3<double> Ray3d;
- #{
- template<typename T>
- inline Ray3<T>::Ray3()
- {}
- template<typename T>
- inline Ray3<T>::Ray3(const Vector3<T>& origin, const Vector3<T>& direction) :
- m_origin(origin), m_direction(direction)
- {}
- template<typename T>
- inline void Ray3<T>::getPoint(Vector3<T>& point, T t) const
- {
- point.x = m_origin.x + m_direction.x * t;
- point.y = m_origin.y + m_direction.y * t;
- point.z = m_origin.z + m_direction.z * t;
- }
- template<typename T>
- inline Vector3<T> Ray3<T>::getPoint(T t) const
- {
- return Vector3<T>(m_origin.x + m_direction.x * t,
- m_origin.y + m_direction.y * t,
- m_origin.z + m_direction.z * t);
- }
- #}
- }
第一行
#import "Tutorial6.i"
在后面Ray3的定义中使用到了模板类Vector3,所以在此处要先引入此文件。
template<T>
struct Ray3
此处定义了模板类Ray3。其中有类型为Vector3<T>的两个成员变量m_origin和m_direction。在这个类中以 m_origin + m_direction * t (t >= 0) 参数方程的形式表示一个射线。有两个名为getPoint的重载函数用来获取射线上的一点坐标。
export Ray3<float>;
export Ray3<double>;
模板实例化,这两行代码指示idlcpp生成相应类型的元数据信息。
typedef Ray3<float> Ray3f;
typedef Ray3<double> Ray3d;
定义类型别名,方便使用。
编译后生成的Tutorial7.h的内容如下:
- //DO NOT EDIT THIS FILE, it is generated by idlcpp
- //http://www.idlcpp.org
- #pragma once
- #include "./Tutorial6.h"
- namespace tutorial
- {
- template<typename T>
- struct Ray3
- {
- public:
- Ray3();
- Ray3(const Vector3<T>& origin,const Vector3<T>& direction);
- void getPoint(Vector3<T>& point,T t)const ;
- Vector3<T> getPoint(T t)const ;
- Vector3<T> m_origin;
- Vector3<T> m_direction;
- };
- typedef Ray3<float> Ray3f;
- typedef Ray3<double> Ray3d;
- template<typename T>
- inline Ray3<T>::Ray3()
- {}
- template<typename T>
- inline Ray3<T>::Ray3(const Vector3<T>& origin, const Vector3<T>& direction) :
- m_origin(origin), m_direction(direction)
- {}
- template<typename T>
- inline void Ray3<T>::getPoint(Vector3<T>& point, T t) const
- {
- point.x = m_origin.x + m_direction.x * t;
- point.y = m_origin.y + m_direction.y * t;
- point.z = m_origin.z + m_direction.z * t;
- }
- template<typename T>
- inline Vector3<T> Ray3<T>::getPoint(T t) const
- {
- return Vector3<T>(m_origin.x + m_direction.x * t,
- m_origin.y + m_direction.y * t,
- m_origin.z + m_direction.z * t);
- }
- }
然后是Tutorial7.cpp
- #include "Tutorial7.h"
- #include "Tutorial7.mh"
- #include "Tutorial7.ic"
- #include "Tutorial7.mc"
因为模板类的代码都写在头文件中了,所以Tutorial7.cpp只需要包含对应的四个文件即可。
另外模板类Ray3用到了模板类Vector3,所以其实例化类型Ray3<float>和Ray3<double>也分别用到Vector3的实例化类型Vector3<float>和Vector3<double>,相应的Ray3<float>元数据中也会用到Vector3<float>的元数据信息。所以在这个工程中需要将Tutorial6.cpp加入进来。
最后看一下Tutorial7.py的内容
- p = paf.float.NewArray(3);
- p[0] = 1;
- p[1] = 2;
- p[2] = 3;
- ray = paf.tutorial.Ray3f(paf.tutorial.Vector3f.s_zero, paf.tutorial.Vector3f(p));
- pt = paf.tutorial.Vector3f(0,0,0);
- ray.getPoint(pt, 2);
- print(pt.x._);
- print(pt.y._);
- print(pt.z._);
- pt = ray.getPoint(3);
- print(pt.x._);
- print(pt.y._);
- print(pt.z._);
第一行:
p = paf.float.NewArray(3);
创建一个float类型的数组,共三个元素,其中float是内置的类型。C++的原生类型在idlcpp中都是支持的,如下:
- bool
- char
- signed char
- unsigned char
- wchar_t
- short
- unsigned short
- long
- unsigned long
- long long
- unsigned long long
- int
- unsigned int
- float
- double
- long double
考虑到有些类型中间有空格,为脚本使用方便,还为这些类型定义了别名,具体参见pafcore中的Typedef.i
编译执行,结果如下图:
C++混合编程之idlcpp教程Python篇(9)的更多相关文章
- C++混合编程之idlcpp教程Python篇(8)
上一篇在这 C++混合编程之idlcpp教程Python篇(7) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相似,工程PythonTutorial6中,同样加入了四个文件:Pyt ...
- C++混合编程之idlcpp教程Python篇(7)
上一篇在这 C++混合编程之idlcpp教程Python篇(6) 第一篇在这 C++混合编程之idlcpp教程(一) 与PythonTutorial4工程相似,工程PythonTutorial5中,同 ...
- C++混合编程之idlcpp教程Python篇(6)
上一篇在这 C++混合编程之idlcpp教程Python篇(5) 第一篇在这 C++混合编程之idlcpp教程(一) 工程PythonTutorial4中加入了四个文件:PythonTutorial4 ...
- C++混合编程之idlcpp教程Python篇(5)
上一篇在这 C++混合编程之idlcpp教程Python篇(4) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相似,工程PythonTutorial3中,同样加入了三个文件:Py ...
- C++混合编程之idlcpp教程Python篇(4)
上一篇在这 C++混合编程之idlcpp教程Python篇(3) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相似,工程PythonTutorial2中,同样加入了三个文件 Pyt ...
- C++混合编程之idlcpp教程Python篇(3)
上一篇 C++混合编程之idlcpp教程Python篇(2) 是一个 hello world 的例子,仅仅涉及了静态函数的调用.这一篇会有新的内容. 与PythonTutorial0相似,工程Pyth ...
- C++混合编程之idlcpp教程Python篇(2)
在上一篇 C++混合编程之idlcpp教程(一) 中介绍了 idlcpp 工具的使用.现在对 idlcpp 所带的示例教程进行讲解,这里针对的 Python 语言的例子.首先看第一个示例程序 Pyth ...
- C++混合编程之idlcpp教程Lua篇(6)
上一篇在这 C++混合编程之idlcpp教程Lua篇(5) 第一篇在这 C++混合编程之idlcpp教程(一) 工程LuaTutorial4中加入了四个文件:LuaTutorial4.cpp, Tut ...
- C++混合编程之idlcpp教程Lua篇(9)
上一篇在这 C++混合编程之idlcpp教程Lua篇(8) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相比,工程LuaTutorial7中除了四个文件LuaTutorial7.c ...
随机推荐
- Window Server 2012 R2 没有照片查看器 打开图片都是画板问题怎么解决
新安装了 Window Server 2012 R2 系统,感觉屌屌的样子,加上开机速度蛮快,心里略爽.结果,打开图片一看,发现竟然是画板,而且还没有照片查看器,顿时泪流满面. 后来我利用了强大的百度 ...
- [转] Oracle sql 查询突然变慢 -- 案例分析
转自:http://jingyan.baidu.com/article/8275fc868ce57946a03cf692.html 一条sql突然执行变慢,耗时9秒,应用是不能改的,只能从数据库方面下 ...
- Python模块:struct
各个编程语言都有自己的数据类型,当python需要接受其他语言或者网络传输来交互数据的时候,需要考虑到python的数据类型与其他平台之间交互问题.而python的struct就是解决这个问题的. s ...
- NC 解决启动环境报内存溢出问题
java heap space 内存溢出 解决方法如下: 在eclipse中,window-->preferences-->Java-->Installed JREs选中JRE 点击 ...
- 在windows下面配置redis集群遇到的一些坑
最近工作不忙,就决定学习一下redis.因为一直在windows下工作,不会linux,没办法就选择在windows下配置redis. windows下配置redis集群的文章有很多,比如:http: ...
- 详解C语言的类型转换
1.自动类型转换 字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128-127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围是0-255( ...
- Web程序的运行原理及流程(二)
其实WEB服务器和WEB应用服务器这两个概念特别容易混淆 可以理解为装了不同软件(服务)的两台计算机(服务器)吧 先对两个概念做一个简单介绍 了解了基本的概念 我们再用两个典型的例子做一下比较(建立 ...
- 1.linux服务器的性能分析与优化
[教程主题]:1.linux服务器的性能分析与优化 [课程录制]: 创E [主要内容] [1]影响Linux服务器性能的因素 操作系统级 CPU 目前大部分CPU在同一时间只能运行一个线程,超线程的处 ...
- IE全屏浏览代码
以前做过一个网络版的商场导购触摸屏系统,用ASP写的,就是要在运行的时候全屏浏览而不能出现标题栏.工具栏.状态栏等.解决方法是用JS弹出全屏窗口,建立html文件,代码如下: <script l ...
- JavaScript-BOM-history:保存当前窗口打开后成功访问过的url历史记录栈
history:保存当前窗口打开后成功访问过的url历史记录栈history.go(n):前进n步前进一步:history.go(1);后退一步:history.go(-1);刷新:history.g ...