可以使用c++对象和方法的MATLAB代码,并使用MATLAB编码器生成代码。的基本思想是将编写一组c++函数作为类的包装方法和MATLAB编码器中调用这些包装器函数。
这个工作流程可分为3部分:
第1部分- c++源文件:
- 定义一个空指针,将铸造的对象类型中使用MATLAB函数。这个空指针将投射到每个包装器函数对象类型。
- 创建包装器函数类构造函数和析构函数。包装器函数的构造函数和析构函数的参数将是一个空指针转换为内部的对象类型的包装器函数。
- 在构造函数包装器函数,在堆上分配内存。
- 在析构函数包装器函数,使用“删除”功能来释放内存。
- 为每一个类方法,将用于一个MATLAB函数,创建一个包装器函数。这些包装器函数的参数之一将是一个空指针。
- 在包装器函数的方法,把空指针指向的对象类型。
- 包装器函数内调用类方法使用箭头操作符(例如- >操作符)。
第2部分- c++头文件:
- 创建一个包装器函数的头文件和封装的头文件的身体“外来的“C”声明以下列方式:
#如果定义__cplusplus
走读生“C”{
#endif
/ /包装器头的身体就在这里。
#如果定义__cplusplus
}
#endif
这是至关重要的,这样代码可以使用c++编译器编译和名称碾压不发生。
第3部分- MATLAB文件:
- 使用“编码器。不透明”在MATLAB函数声明void指针类型。注意,MATLAB代码不能使用“编码器设置或访问一个变量声明。不透明”,但外部C / c++函数可以接受它作为参数。此外,一个变量声明使用“编码器。不透明的“不能被一个入口点的输出MATLAB函数。
- 使用“编码器。eval”从第1部分中定义的调用包装器函数在MATLAB代码。
上述工作流程是强制性的能够调用MATLAB c++类的方法的代码。在c++中,一个类方法调用使用点操作符。例如,调用类的方法“mymethod”“myclass”,你会使用以下命令:
“myclass。mymethod”不是一个有效的论点“编码器。在R2015b ceval”和更早的版本。因此,解决方法是编写包装器函数作为解释在上面的工作流。请参阅MATLAB编码器文档和版本说明的变化在将来的版本中。
请看附件的zip文件的一个简单的例子这个工作流c++类“人”。源文件”的人。cpp”,头文件是“person.h”。包装器函数是“personwrapper的源文件。cpp“头文件”personwrapper.h”。MATLAB函数使用包装器函数是“persontest.m”。MAT-file“configmexexe”加载2配置对象的基本工作空间;一个是用于墨西哥人文件生成,另一个是用于独立可执行的一代。“主要。cpp文件是用于执行。请参阅“generatecode MATLAB脚本。m”生成一个墨西哥人文件和可执行的。