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