主要内容

生成C ++类马铃薯班级

生成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.cpp.包含定义在里面

myclass * myclass :: init(double值){myclass * obj;obj =这个;obj-> publicprop = 1.0;obj-> privateprop = value;返回obj;}

在大多数情况下,如果类成员在MATLAB中设置为私有,则它也会在生成的C ++代码中设置为私有。

在某些情况下,在生成的C ++代码中引入公共方法将MATLAB代码中的私有属性更改为生成的代码中的公共属性并中断数据封装。例如,假设一个公共方法迈运使用私有财产支柱对象由入口点函数调用。如果迈运在生成的代码中内嵌,属性支柱必须从对象外部可见并更改为公共财产。

要限制此事件,代码生成器在这种情况下使用特殊的Inlinig规则进行公共方法:

  • 如果代码配置属性内联卫生休眠或等效的代码生成设置用户函数之间的内联在里面Matlab编码器应用程序设置为'可读性',代码生成器不会在类定义之外的公共方法调用内联。

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

  • 功能的主体或方法包含明确的编码器.inline('总是')或者编码器.inline('从不')指示。该指令获得最高优先级。

  • 您设置了代码配置属性内联卫生休眠或等效的代码生成设置用户函数之间的内联在里面Matlab编码器应用程序到'绝不''速度', 或者'总是'

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

控制与生成代码的微调性能和可读性的联系

生成的C ++类的定义我的课是:

class myclass {public:myclass * init(double值);缺点publicmethod(双价值);静态双倍双重(双瓦);Double CalculatesOmeValue()const;双重实践;私人:双人专用品;};

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

私人方法privatemethod.没有出现在此定义中。privatemethod.在定义中环绕公共机构(见文件myclass.cpp.):

void myclass :: publicmethod(双重值){this-> publicprop + = value;这个 - > privateprop + = myclass :: doubleThisValue((价值));}

MATLAB中的静态方法映射到静态C ++方法上。

静态方法生成的代码DoubleThisValue.有这个签名:

静态双倍双重(双瓦);

不突变对象的方法标有const生成的代码中的限定符。

公共方法计算omevalue.不突变对象。生成的方法具有此签名:

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.或者生成重新参与代码范围。

也可以看看

||

相关话题