生成c++类MATLAB类
生成c++代码时,代码生成器的默认行为为MATLAB中的类生成c++类®代码。这些包括所有的MATLAB类,如值类、句柄类和系统对象。
您可以更改代码生成器的默认行为,以生成MATLAB类的结构。要更改默认行为,请执行以下操作之一:
在代码配置对象中,设置
TargetLang
来“c++”
而且CppPreserveClasses
来假
.在MATLAB编码器™应用程序,在生成一步,设置语言来c++.的项目生成设置中代码的外观选项卡,清除从MATLAB类生成c++类复选框。
这些例子说明了代码生成器在将MATLAB类映射到c++类时遵循的某些规则。
示例:为拥有私有和公共成员的句柄类生成代码
定义一个MATLAB句柄类MyClass
:
classdefMyClass < handle属性publicProp = 1;结束属性(Access = private) privateProp结束方法函数obj = MyClass(value) obj。privateProp = value;结束函数publicMethod (obj,值)obj.privateMethod(价值);结束函数res = calculateSomeValue(obj) res = obj. publicprop *obj. privateprop;结束结束方法(Access = private)函数privateMethod (obj,价值)obj。publicProp = obj。publicProp + value;obj。privateProp = obj。privateProp + obj.doubleThisValue(value);结束结束方法(静态)函数res = doubleThisValue(val) res = 2 * val;结束结束结束
定义一个MATLAB函数喷火
使用MyClass
:
函数out = foo(x,y) obj = MyClass(x);obj.publicMethod (y);out = obj.calculateSomeValue;结束
生成一个静态c++库喷火
.将输入参数指定为双标量。设置代码生成配置属性InlineBetweenUserFunctions
来“可读性”
.
CFG = code .config(“自由”);cfg。TargetLang =“c++”;cfg。InlineBetweenUserFunctions =“可读性”;codegen配置cfg喷火arg游戏{0}报告
代码生成成功:查看报告
打开代码生成报告并检查生成的代码。该文件MyClass.h
包含生成的c++类的定义MyClass
:
class MyClass {public: MyClass *init(double value);void publicMethod(double value);static double doubleThisValue(double val);const;双publicProp;private: double 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 = this;obj->publicProp = 1.0;obj->privateProp = value;返回obj;} |
在大多数情况下,如果一个类成员在MATLAB中被设置为私有,那么在生成的c++代码中它也会被设置为私有。 在某些情况下,在生成的c++代码中内联一个公共方法会将MATLAB代码中的私有属性更改为生成的代码中的公共属性,并破坏数据封装。例如,假设一个公共方法 为了限制这种情况的发生,代码生成器在这种情况下对公共方法使用了特殊的内联规则:
在这些情况下,同样的内联规则适用于普通函数和公共方法:
|
生成的c++类的定义 class MyClass {public: MyClass *init(double value);void publicMethod(double value);static double doubleThisValue(double val);const;双publicProp;private: double privateProp;}; 所有数据和成员函数在MATLAB和生成的代码之间保持可见性。 私有方法 void MyClass::publicMethod(double value) {this->publicProp += value;this->privateProp += MyClass::doubleThisValue((value));} |
MATLAB中的静态方法映射到静态c++方法。 |
为静态方法生成的代码 static double doubleThisValue(double val); |
方法标记不改变对象的方法 |
公共方法 const; |
其他使用说明和限制
下面是一些从MATLAB类生成c++类的附加用法注意事项和限制:
的类原型
MyClass
包含在头文件中MyClass.h
.该类方法的实现包含在文件中MyClass.cpp
.在生成的代码中,类层次结构是扁平的。例如,假设在你的MATLAB代码中,类
B
从类继承一个
.在生成的c++代码中,类B
而且一个
他们之间没有继承关系。在生成的代码中,类的所有属性和方法一个
在阶级的定义中是再现的吗B
.当MATLAB类的属性使用不同的类型时,代码生成器会为每种类型的使用生成一个单独的c++类。
如果MATLAB类成员有不同的
GetAccess
而且SetAccess
属性时,生成的类的对应成员具有两个属性中更允许的一个。例如,如果一个属性道具
具有属性(GetAccess = public, SetAccess = private)
,道具
在生成的代码中定义为公共属性。在尝试为MATLAB类生成包含c++类的独立代码时,如果这两个条件都为真,您可能会得到一条警告消息:
方法来生成可重入代码
MultiInstanceCode
参数,或通过启用生成可重入代码参数中的MATLAB编码器应用程序。MATLAB代码中类的析构函数有一个持久变量,或者调用另一个声明并使用持久变量的函数。
在这种情况下,要为MATLAB类生成包含c++类的代码,请禁用
MultiInstanceCode
或者是生成可重入代码参数。
另请参阅
编码器。CodeConfig
|编码器。EmbeddedCodeConfig
|编码器。MexCodeConfig