主要内容

生成c++类MATLAB

当您生成c++代码,代码生成器的默认行为是产生在MATLAB c++类的类®代码。这些包括所有MATLAB类,如值类,处理类,和系统对象。

您可以更改默认行为MATLAB代码生成器和生产结构的类。要做这个选择,做以下之一:

  • 在一个代码配置对象,集TargetLang“c++”CppPreserveClasses

  • MATLAB编码器™应用程序,生成一步,设置语言c++。在项目构建设置代码的外观选项卡上,清晰的从MATLAB生成c++类的类复选框。

下面的例子说明时,代码生成器遵循一定的规则映射MATLAB c++类类。

例如:生成代码处理私人和公共的类成员

定义一个MATLAB处理类MyClass:

classdefMyClass <处理属性publicProp = 1;结束属性(访问=私人)privateProp结束方法函数obj = MyClass(价值)obj。privateProp =价值;结束函数publicMethod (obj,值)obj.privateMethod(价值);结束函数res = calculateSomeValue (obj) res = obj.publicProp * obj.privateProp;结束结束方法(访问=私人)函数privateMethod (obj,价值)obj。publicProp = obj。publicProp +价值;obj。privateProp = obj。privateProp + obj.doubleThisValue(价值);结束结束方法(静态)函数res = doubleThisValue res = 2 *瓦尔(val);结束结束结束

定义一个MATLAB函数喷火使用MyClass:

函数= foo (x, y) obj = MyClass (x);obj.publicMethod (y);= obj.calculateSomeValue;结束

生成一个静态的c++库喷火。指定输入参数是一个双标量。

codegen配置:自由朗:c++喷火arg游戏{0}报告
代码生成成功:查看报告

打开代码生成报告和检查生成的代码。该文件MyClass.h包含生成的c++类的定义MyClass:

MyClass类{公众:MyClass * init(双精度值);空白publicMethod(双精度值);静态双doubleThisValue(双val);双calculateSomeValue()常量;双publicProp;私人:双privateProp;};

这是生成的代码的函数喷火:

双foo(双x,双y) {MyClass obj;obj.init (x);obj.publicMethod (y);返回obj.calculateSomeValue ();}

这个表说明了一些规则的代码生成器之前在生成c++类和相应的从生成的代码片段MyClass

规则 代码片段

MATLAB是映射到一个类构造函数初始化方法。创建类的实例时,生成的代码显式地调用初始化方法。

该文件MyClass.cpp包含的定义初始化

MyClass * MyClass:: init(双值){MyClass * obj;obj =;obj - > publicProp = 1.0;obj - > privateProp =价值;返回obj;}

在大多数情况下,如果一个类成员设置为私人在MATLAB中,它也设置为私人在生成c++代码。

在某些情况下,一个私有财产在MATLAB可能改变了公众在生成的代码中。例如,假设一个公共方法myMethod使用私有财产道具的对象是由一个入口点函数调用MATLAB。另外,假设myMethod包含了coder.inline(总是)指令,力量myMethod内联在生成的代码。因此,在生成的代码中,财产道具必须从外部可见的对象并改变了公众。

限制这种现象的发生,代码生成器并不包含内联一个公共方法,除非方法coder.inline(总是)指令。

生成c++类的定义MyClass是:

MyClass类{公众:MyClass * init(双精度值);空白publicMethod(双精度值);静态双doubleThisValue(双val);双calculateSomeValue()常量;双publicProp;私人:双privateProp;};

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

私有方法privateMethod没有出现在这个定义。privateMethod内联的定义吗publicMethod(见文件中MyClass.cpp):

空白MyClass:: publicMethod(双值){- > publicProp + =价值;这- > privateProp + = MyClass: doubleThisValue((值));}

静态方法在MATLAB c++映射到静态方法。

生成的代码的静态方法doubleThisValue这个签名:

静态双doubleThisValue(双val);

不改变对象的方法标明常量限定符在生成的代码。

的公共方法calculateSomeValue不改变对象。生成的方法有这个签名:

双calculateSomeValue()常量;

额外使用笔记和局限性

这些都是一些额外的使用说明和限制从MATLAB生成c++类类:

  • 类的原型MyClass头文件中包含吗MyClass.h。的实现类的方法中包含该文件MyClass.cpp

  • 在生成的代码中,类层次结构被夷为平地。例如,假设在MATLAB代码中,类B类继承自一个。在生成c++代码,类B一个他们之间没有继承关系。在生成的代码中,类的所有属性和方法一个在类的定义复制B

  • 当一个MATLAB类使用不同类型的属性,代码生成器生成一个单独的c++类为每个类型的使用。

  • 如果一个MATLAB类成员有不同的GetAccessSetAccess生成的类的属性,对应的成员有两个属性的更多的宽容。例如,如果一个属性道具有属性(GetAccess =公共SetAccess =私人),道具被定义为公共的生成的代码。

  • 在试图生成独立的代码,其中包含为MATLAB c++类类,你可能会得到一个警告消息,如果这两个条件是正确的:

    • 你选择启用生成可重入的代码MultiInstanceCode参数代码配置对象中,或者通过支持生成可重入的代码参数MATLAB编码器应用程序。

    • 类的析构函数在MATLAB代码中有一个持续的变量或调用另一个函数声明和使用一个持久变量。

    在这种情况下,生成的代码包含用于MATLAB c++类类,禁用MultiInstanceCode或者是生成可重入的代码参数。

另请参阅

||

相关的话题