当您生成c++代码时,代码生成器的默认行为为您的MATLAB中的类生成c++类®代码。这些包括所有MATLAB类,如值类、句柄类和系统对象。
您可以更改代码生成器的默认行为,以生成MATLAB类的结构。要更改默认行为,请执行以下操作之一:
在代码配置对象中,设置TargetLang
来“c++”
和CppPreserveClasses
来假
.
在MATLAB编码器™应用程序,生成一步,设置语言来c++.在项目生成设置中,在代码的外观选项卡上,清晰的从MATLAB类生成c++类复选框。
这些示例说明了代码生成器在将MATLAB类映射到c++类时遵循的某些规则。
定义一个MATLAB句柄类MyClass
:
classdefMyClass <处理属性publicProp = 1;结束属性(Access = private结束方法函数obj = MyClass(value)privateProp =价值;结束函数publicMethod (obj,值)obj.privateMethod(价值);结束函数res = calculatesomvalue (obj) res = obj. publicprop *obj. privateprop;结束结束方法(访问=私人)函数privateMethod (obj,价值)obj。publicProp = obj。publicProp +价值;obj。privateProp = obj。privateProp + obj.doubleThisValue(价值);结束结束方法(静态)函数res = doubleThisValue(val) res = 2 * val;结束结束结束
定义MATLAB函数喷火
使用MyClass
:
函数out = 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
:
class MyClass {public: MyClass *init(double value);空白publicMethod(双精度值);static double doubleThisValue(double val);双calculateSomeValue()常量;双publicProp;私人:双privateProp;};
这是为函数生成的代码喷火
:
double foo(double x, double y) {MyClass obj;obj.init (x);obj.publicMethod (y);返回obj.calculateSomeValue ();}
该表列出了代码生成器在生成c++类时遵循的一些规则,以及从生成的代码中生成的相应代码段MyClass
.
规则 | 代码片段 |
---|---|
类构造函数在MATLAB中被映射到 |
该文件 MyClass *MyClass::init(double value) {MyClass *obj;obj =;obj - > publicProp = 1.0;obj - > privateProp =价值;返回obj;} |
在大多数情况下,如果一个类成员在MATLAB中被设置为private,那么它在生成的c++代码中也被设置为private。 在某些情况下,在生成的c++代码中内联公共方法会将MATLAB代码中的私有属性更改为生成代码中的公共属性,并破坏数据封装。例如,假设有一个公共方法 为了限制这种情况的发生,代码生成器在这种情况下对公共方法使用了一个特殊的inlinig规则:
在这些情况下,相同的内联规则适用于普通函数和公共方法:
|
生成的c++类的定义 class MyClass {public: MyClass *init(double value);空白publicMethod(双精度值);static double doubleThisValue(double val);双calculateSomeValue()常量;双publicProp;私人:双privateProp;}; 所有数据和成员函数的可见性保留在MATLAB和生成的代码之间。 私有方法 void MyClass::publicMethod(double value) {this->publicProp += value;——> privateProp + = MyClass: doubleThisValue((值));} |
MATLAB中的静态方法映射到静态c++方法。 |
为静态方法生成的代码 static double doubleThisValue(double val); |
属性标记不改变对象的方法 |
的公共方法 双calculateSomeValue()常量; |
以下是一些从MATLAB类生成c++类的额外使用注意事项和限制:
的类原型MyClass
包含在头文件中MyClass.h
.类方法的实现包含在文件中MyClass.cpp
.
在生成的代码中,类层次结构是扁平的。例如,假设在你的MATLAB代码,类B
类继承自一个
.在生成的c++代码中,类B
和一个
他们之间没有继承关系。在生成的代码中,类的所有属性和方法一个
是否在类的定义中复制B
.
当一个MATLAB类为其属性使用不同的类型时,代码生成器会为每种类型的使用生成一个单独的c++类。
如果一个MATLAB类成员有不同GetAccess
和SetAccess
属性,生成的类的相应成员具有两个属性中更宽容的一个。例如,如果一个属性道具
有属性(GetAccess = public, SetAccess = private)
,道具
在生成的代码中定义为公共属性。
当试图生成包含c++类的MATLAB类的独立代码时,如果这两个条件都为真,你可能会得到一条警告消息:
选择生成可重入代码,通过启用MultiInstanceCode
参数,或通过启用生成可重入的代码参数MATLAB编码器应用程序。
在MATLAB代码中,类的析构函数有一个持久变量,或者调用声明和使用持久变量的另一个函数。
在这种情况下,要为MATLAB类生成包含c++类的代码,禁用MultiInstanceCode
或者是生成可重入的代码参数。
编码器。CodeConfig
|编码器。EmbeddedCodeConfig
|编码器。MexCodeConfig