生成C ++代码时,代码生成器的默认行为为MATLAB中的类生成C ++类®代码。这些包括所有MATLAB类,如value类,处理类和系统对象。
您可以更改代码生成器的默认行为以生成MATLAB类的结构。要更改默认行为,请执行以下操作之一:
在代码配置对象中,设置targetlang.
到'c ++'
和CPPPRESERVEClasses.
到错误的
。
在里面Matlab Coder™应用程序,在产生步骤,设置语言到C ++。在项目构建设置中,在代码外观标签,清除从Matlab类生成C ++类复选框。
这些示例说明了在将MATLAB类映射到C ++类时遵循的某些规则。
定义MATLAB句柄类我的课
:
Classdef.myclass <句柄特性publicprop = 1;结尾特性(访问=私有)privateprop结尾方法功能obj = myclass(value)obj.privateprop = value;结尾功能publicmethod(obj,价值)obj.privatemethod(价值);结尾功能res = calculatesomevalue(obj)res = obj.publicprop * obj.privateprop;结尾结尾方法(访问=私人)功能privatemethod(obj,value)obj.publicprop = obj.publicprop +值;obj.privateprop = obj.privateprop + obj.doublethisvalue(价值);结尾结尾方法(静态的)功能Res = DoubleThisvalue(Val)Res = 2 * Val;结尾结尾结尾
定义MATLAB功能Foo
使用我的课
:
功能OUT = foo(x,y)obj = myclass(x);obj.publicmethod(y);out = obj.calculatesomevalue;结尾
生成静态C ++库Foo
。将输入参数指定为双标量。设置代码生成配置属性内联卫生休眠
到'可读性'
。
cfg = coder.config('lib');cfg.targetlang ='c ++';cfg.inlinebetweenuserfunctions =.'可读性';Codegen.-Config.CFG.Foo- args.{0,0}-报告
代码成功:查看报告
打开代码生成报告并检查生成的代码。文件myclass.h.
包含生成的C ++类的定义我的课
:
class myclass {public:myclass * init(double值);缺点publicmethod(双价值);静态双倍双重(双瓦);Double CalculatesOmeValue()const;双重实践;私人:双人专用品;};
这是为函数生成的代码Foo
:
双重foo(双x,双y){myclass obj;obj.init(x);obj.publicmethod(y);返回obj.calculatesomevalue();}
此表列出了在生成C ++类和生成的代码中生成C ++类和相应的片段时遵循的一些规则我的课
。
规则 | 代码片段 |
---|---|
Matlab中的Class构造函数映射到 |
文件 myclass * myclass :: init(double值){myclass * obj;obj =这个;obj-> publicprop = 1.0;obj-> privateprop = value;返回obj;} |
在大多数情况下,如果类成员在MATLAB中设置为私有,则它也会在生成的C ++代码中设置为私有。 在某些情况下,在生成的C ++代码中引入公共方法将MATLAB代码中的私有属性更改为生成的代码中的公共属性并中断数据封装。例如,假设一个公共方法 要限制此事件,代码生成器在这种情况下使用特殊的Inlinig规则进行公共方法:
在这些情况下,相同的内联规则适用于普通功能和公共方法:
|
生成的C ++类的定义 class myclass {public:myclass * init(double值);缺点publicmethod(双价值);静态双倍双重(双瓦);Double CalculatesOmeValue()const;双重实践;私人:双人专用品;}; MATLAB和生成的代码之间保留所有数据和成员函数的可见性。 私人方法 void myclass :: publicmethod(双重值){this-> publicprop + = value;这个 - > privateprop + = myclass :: doubleThisValue((价值));} |
MATLAB中的静态方法映射到静态C ++方法上。 |
静态方法生成的代码 静态双倍双重(双瓦); |
不突变对象的方法标有 |
公共方法 Double CalculatesOmeValue()const; |
这些是从Matlab类生成C ++类的一些额外使用说明和限制:
类原型我的课
包含在标题文件中myclass.h.
。该类方法的实现包含在文件中myclass.cpp.
。
在生成的代码中,类层次结构趋于平坦化。例如,假设在Matlab代码中,类B.
继承来自课程一种
。在生成的C ++代码中,类B.
和一种
它们之间没有继承关系。在生成的代码中,所有属性和类的类一种
在类的定义中转载B.
。
当Matlab类使用不同类型的属性时,代码生成器为每个类型使用产生单独的C ++类。
如果Matlab类成员有不同Getaccess.
和setaccess.
属性,生成类的相应成员具有两个属性的许可。例如,如果属性支柱
有属性(getaccess = public,setaccess = private)
那支柱
被定义为生成代码中的公共属性。
尝试生成包含MATLAB类的C ++类的独立代码,如果这两个条件都是真的,则可能会收到警告消息:
您选择通过启用来生成重换代码multipstancecode.
代码配置对象中的参数或通过启用生成重新参与代码参数在Matlab编码器应用程序。
MATLAB代码中的类的析构函数具有持久性变量,也可以调用另一个声明并使用持久性变量的函数。
在这种情况下,要生成包含MATLAB类的C ++类的代码,请禁用multipstancecode.
或者生成重新参与代码范围。
coder.codeConfig
|Coder.embeddedCodeConfig
|Coder.mexcodeConfig