主要内容

生成c++类MATLAB

生成c++代码时,默认行为的代码生成器生成c++类在MATLAB的类®代码。这些包括所有MATLAB类,如值类,处理类,和系统对象。

您可以更改默认行为MATLAB代码生成器产生结构的类。改变默认的行为,下列之一:

  • 在一个代码配置对象,集TargetLang“c++”CppPreserveClasses

  • MATLAB编码器™应用程序,生成一步,设置语言c++。在项目构建设置代码的外观选项卡上,清晰的从MATLAB生成c++类的类复选框。

这些例子说明时,代码生成器遵循一定的规则映射MATLAB c++类类。

例如:生成代码的处理类,有私人和公共成员

定义一个MATLAB处理类MyClass:

classdefMyClass <处理属性publicProp = 1;结束属性(访问=私人)privateProp结束方法函数obj = MyClass(价值)obj。privateProp =价值;结束函数publicMethod (obj,值)obj.privateMethod(价值);结束函数res = calculateSomeValue (obj) res = obj.publicProp * obj.privateProp;结束结束方法(访问=私人)函数privateMethod (obj,价值)obj。publicProp = obj。publicProp +价值;obj。privateProp = obj。privateProp + obj.doubleThisValue(价值);结束结束方法(静态)函数res = doubleThisValue res = 2 *瓦尔(val);结束结束结束

定义一个MATLAB函数喷火使用MyClass:

函数= foo (x, y) obj = MyClass (x);obj.publicMethod (y);= obj.calculateSomeValue;结束

生成一个静态的c++库喷火。指定输入参数是一个双标量。设置代码生成配置属性InlineBetweenUserFunctions“可读性”

cfg = coder.config (“自由”);cfg。TargetLang =“c++”;cfg。InlineBetweenUserFunctions =“可读性”;codegen配置cfg喷火arg游戏{0}报告
代码生成成功:查看报告

打开代码生成报告和检查生成的代码。该文件MyClass.h包含生成的c++类的定义MyClass:

MyClass类{公众:MyClass * init(双精度值);空白publicMethod(双精度值);静态双doubleThisValue(双val);双calculateSomeValue()常量;双publicProp;私人:双privateProp;};

这是生成的代码的函数喷火:

双foo(双x,双y) {MyClass obj;obj.init (x);obj.publicMethod (y);返回obj.calculateSomeValue ();}

此表列出了一些代码生成器的规则遵循在生成c++类和相应的从生成的代码片段MyClass

规则 代码片段

MATLAB是映射到一个类构造函数初始化方法。创建类的实例时,生成的代码显式地调用初始化方法。

该文件MyClass.cpp包含的定义初始化

MyClass * MyClass:: init(双值){MyClass * obj;obj =;obj - > publicProp = 1.0;obj - > privateProp =价值;返回obj;}

在大多数情况下,如果一个类成员设置为私人在MATLAB中,它也设置为私人在生成c++代码。

在某些情况下,内联一个公共方法在生成c++代码更改MATLAB代码的私有财产的公共财产生成的代码和数据封装。例如,假设一个公共方法myMethod使用私有财产道具调用对象的一个入口点函数。如果myMethod内联在生成的代码中,财产吗道具必须从外部可见对象,改变了公共财产。

限制这个发生,代码生成器使用一个特殊inlinig规则公共方法在这种情况下:

  • 如果代码配置属性InlineBetweenUserFunctions相当于代码生成设置内联之间用户功能MATLAB编码器应用程序设置为“可读性”,代码生成器不内联方法调用公众出现在类定义之外。

在这些情况下,相同的内联规则适用于普通函数和公共方法:

  • 的身体包含显式的函数或方法coder.inline(总是)coder.inline(“不”)指令。这个指令得到最高的优先级。

  • 设置代码配置属性InlineBetweenUserFunctions相当于代码生成设置内联之间用户功能MATLAB编码器应用“永远”,“速度”,或“总是”

  • 调用一个方法出现在同一个类的另一种方法。

看到控制内联微调性能和生成的代码的可读性

生成c++类的定义MyClass是:

MyClass类{公众:MyClass * init(双精度值);空白publicMethod(双精度值);静态双doubleThisValue(双val);双calculateSomeValue()常量;双publicProp;私人:双privateProp;};

所有数据的可见性和成员函数是MATLAB之间保存和生成的代码。

私有方法privateMethod没有出现在这个定义。privateMethod内联的定义吗publicMethod(见文件中MyClass.cpp):

空白MyClass:: publicMethod(双值){- > publicProp + =价值;这- > privateProp + = MyClass: doubleThisValue((值));}

静态方法在MATLAB c++映射到静态方法。

生成的代码的静态方法doubleThisValue这个签名:

静态双doubleThisValue(双val);

不改变对象的方法标明常量限定符在生成的代码。

的公共方法calculateSomeValue不改变对象。生成的方法有这个签名:

双calculateSomeValue()常量;

额外使用笔记和局限性

这些都是一些额外的使用说明和限制从MATLAB生成c++类类:

  • 类的原型MyClass头文件中包含吗MyClass.h。的实现类的方法中包含该文件MyClass.cpp

  • 在生成的代码中,类层次结构被夷为平地。例如,假设在MATLAB代码中,类B类继承自一个。在生成c++代码,类B一个他们之间没有继承关系。在生成的代码中,类的所有属性和方法一个在类的定义复制B

  • 当一个MATLAB类使用不同类型的属性,代码生成器生成一个单独的c++类为每个类型的使用。

  • 如果一个MATLAB类成员有不同的GetAccessSetAccess生成的类的属性,对应的成员有两个属性的更多的宽容。例如,如果一个属性道具有属性(GetAccess =公共SetAccess =私人),道具定义一个公共财产在生成的代码。

  • 在试图生成独立的代码,其中包含为MATLAB c++类类,你可能会得到一个警告消息,如果这两个条件是正确的:

    • 你选择启用生成可重入的代码MultiInstanceCode参数代码配置对象或通过支持生成可重入的代码参数MATLAB编码器应用程序。

    • 类的析构函数在MATLAB代码中有一个持续的变量或调用另一个函数声明和使用一个持久变量。

    在这种情况下,生成的代码包含用于MATLAB c++类类,禁用MultiInstanceCode或者是生成可重入的代码参数。

另请参阅

||

相关的话题