主要内容

c++MATLAB数据API共享库支持强类型金宝appMATLAB代码

当从MATLAB创建c++共享库时®函数或类,您可以通过使用MATLAB和c++之间的标准和自定义数据类型映射,规定如何在c++应用程序代码中表示MATLAB数据类型。要指定数据类型要求,可以使用参数块内的MATLAB函数或属性块和参数块在MATLAB类中。例如,如果您的c++应用程序代码使用浮动数据类型表示一个实标量双值,其在MATLAB中的等效表示为(1,1)单瓣{须叶}

样本MATLAB函数与强类型数据

函数r = stronglyTypedFun(num)参数全国矿工工会(1,1)单瓣{须叶}结束R = magic(num);

样本MATLAB类强类型数据

classdefMyPosition属性X(1,1)双{mustBeReal}Y(1,1)双{mustBeReal}结束结束

详细信息请参见c++和强类型MATLAB代码之间的数据类型映射

编译强类型的MATLAB函数、类或包时,MATLAB编译SDK™生成一个c++共享库头文件(. hpp文件)和可部署存档(.ctf文件)。要从MATLAB命令提示符生成头文件,请输入世纪挑战集团命令使用如下语法:

世纪挑战集团- w“cpplib: < library_name >,仿制的< MATLAB文件(年代)和/或文件夹(s) >- d<输出文件夹>

提示

方法生成头文件库的编译器应用:

  1. 类型部分,单击c++共享库

  2. 导出功能部分的工具条,添加相关MATLAB文件。

  3. API的选择部分,选择创建使用MATLAB数据API和强类型接口的接口选项,然后单击

头文件(. hpp)在与可部署存档相同的位置生成(.ctf)在v2 \ generic_interface文件夹中。

生成的头文件:

  • 将强类型的MATLAB数据类型映射到c++数据类型。有关示例,请参见从强类型的MATLAB函数创建c++ MATLAB数据API共享库头

  • 包含与MATLAB包目录同名对应的c++名称空间。有关示例,请参见从包中包含的强类型MATLAB类创建c++ MATLAB Data API共享库标头

  • 包含与同名MATLAB类对应的c++类。

  • 包含与MATLAB类的公共方法对应的公共c++方法。方法名是不变的,可以像在c++应用程序代码中一样使用。这些对齐的名称消除了通过类方法调用类方法的中间层顶级函数的需要函数宏指令函数执行。

  • 包含c++得到而且MATLAB类的公共属性方法。MATLAB类的属性名前加得到.例如,如果MATLAB类中的属性名是UpperLeft,对应的c++方法名为getUpperLeft而且setUpperLeft

强类型的映射MATLAB类转换为c++头文件

强类型MATLAB类 c++头文件片段
classdefMyRectangle属性UpperLeft(1,1)的形状。MyPositionLowerRight(1,1)的形状。MyPosition结束方法函数R =放大(R, n)参数R(1,1)的形状。MyRectanglen(1,1)双{mustBeReal}结束%的代码结束函数R = show(R)参数R(1,1)的形状。MyRectangle结束%的代码结束结束结束
名称空间形状{类MyRectangle: public MATLABObject {public:/ /构造函数MyRectangle(): MATLABObject() {}/ /代码/ /属性形状::MyPosition getUpperLeft() {/ /代码无效setUpperLeft(形状::MyPosition obj) {/ /代码}形状::MyPosition getLowerRight() {// code}无效setLowerRight(形状::MyPosition obj) {/ /代码} //方法matlab::data::Array show() {/ /代码} matlab::data::Array放大(n) {/ /代码}};}

生成的头文件(. hpp文件)及MatlabCppSharedLib.hpp头文件被包含在c++应用程序代码中使用# include指令。然后可以编译并运行应用程序。

示例c++应用程序代码片段

# include“MatlabCppSharedLib.hpp”# include“输出/ cpp / v2 / generic_interface / libshapesv2.hpp”// MCC生成的头文件Int main(const Int argc, char *argv[]) {try {//可以应用于任何应用程序的通用启动器代码汽车mode = matlab::cpplib::MATLABApplicationMode::IN_PROCESS;std::vector OPTIONS = {u"-nojvm"};汽车appPtr = matlab::cpplib::initMATLABApplication(mode, OPTIONS);std:: string ctfName (argv [1]);汽车libPtr = matlab::cpplib::initMATLABLibrary(appPtr, std::u16string(ctfName.cbegin(), ctfName.cend()));std::要查看< MATLABControllerType > matlabPtr (std::移动(libPtr));//依赖于生成头的应用程序特定代码形状:MyPosition p1 (matlabPtr);...形状:MyRectangle r1 (matlabPtr);...}}

提示

  • 在编写c++应用程序代码时,必须包含头文件(. hpp文件)生成的世纪挑战集团命令或库的编译器应用程序和MatlabCppSharedLib.hpp头文件使用# include指令。

  • 您的MATLAB代码必须是强类型的,以利用接口的所有功能。否则,MATLAB和c++之间不存在数据映射,不能使用原生c++数据类型。

  • 在编译过程中,强类型信息仅从参数而且属性块。检索到的信息包括数组大小、类型以及是否为实数。

另请参阅

|

相关的话题