主要内容gydF4y2Ba

生成c++代码的类接口gydF4y2Ba

当您生成C代码,MATLAB软件分析gydF4y2Ba®gydF4y2Ba代码并生成入口点C函数对应MATLAB函数入口点。生成c++代码时,您可以选择生成入口点函数作为c++类中的方法。使用这个选项:gydF4y2Ba

  • 你获得更多的面向对象的代码。gydF4y2Ba

  • 代码生成器生成一个类构造函数和析构函数,自动执行内存初始化和终止。gydF4y2Ba

  • 你分别为每一个类实例分配内存。每个类实例的方法是线程安全的和可重入。gydF4y2Ba

  • 多个入口点函数成为一个c++类的方法。gydF4y2Ba

你可以用一个类生成代码从命令行或接口gydF4y2BaMATLAB编码器™gydF4y2Ba从命令行应用程序。使用gydF4y2BaCppInterfaceStylegydF4y2Ba和gydF4y2BaCppInterfaceClassNamegydF4y2Ba配置参数。从应用程序gydF4y2Ba生成代码gydF4y2Ba步骤中,选择gydF4y2Ba语言gydF4y2Ba作为gydF4y2Bac++gydF4y2Ba中,选择gydF4y2Ba界面风格gydF4y2Ba作为gydF4y2Ba方法gydF4y2Ba,然后指定gydF4y2Bac++接口类的名字gydF4y2Ba。gydF4y2Ba

这些例子显示了命令行工作流程。gydF4y2Ba

生成c++代码的类接口gydF4y2Ba

这个例子显示了如何生成c++代码不同当它使用一个类的接口。gydF4y2Ba

MATLAB算法gydF4y2Ba

考虑执行操作的一个简单的MATLAB函数矩阵和输出结果。gydF4y2Ba

函数gydF4y2Ba出= fooggydF4y2Ba% # codegengydF4y2Ba我=眼(447);从我+ 7 = 1 (447)*;gydF4y2Ba

生成c++代码,没有类接口gydF4y2Ba

生成c++代码的类接口,使用gydF4y2BaCppInterfaceStylegydF4y2Ba和gydF4y2BaCppInterfaceClassNamegydF4y2Ba参数。存储的输出gydF4y2BawithClassgydF4y2Ba文件夹中。gydF4y2Ba

cfg = coder.config (gydF4y2Ba“自由”gydF4y2Ba);cfg。GenCodeOnly = true;cfg。TargetLang =gydF4y2Ba“c++”gydF4y2Ba;cfg。CppInterfaceStyle =gydF4y2Ba“方法”gydF4y2Ba;cfg。CppInterfaceClassName =gydF4y2Ba“myClass”gydF4y2Ba;codegengydF4y2BafooggydF4y2Ba配置gydF4y2BacfggydF4y2Ba报告gydF4y2Ba- dgydF4y2BawithClassgydF4y2Ba
代码生成成功:查看报告,打开(“withClass / html / report.mldatx”)gydF4y2Ba

接下来,创建一个新配置对象并生成c++代码,不使用一个类的接口。gydF4y2Ba

cfg = coder.config (gydF4y2Ba“自由”gydF4y2Ba);cfg。GenCodeOnly = true;cfg。TargetLang =gydF4y2Ba“c++”gydF4y2Ba;codegengydF4y2BafooggydF4y2Ba配置gydF4y2BacfggydF4y2Ba报告gydF4y2Ba- dgydF4y2BawithoutClassgydF4y2Ba
代码生成成功:查看报告,打开(“withoutClass / html / report.mldatx”)gydF4y2Ba

检查生成的示例主要功能。比较版本有或没有接口的类。与类界面,主函数调用的入口点函数作为类方法。gydF4y2Ba

类型gydF4y2BawithClass / / main.cpp例子gydF4y2Ba

在生成的代码类的定义和实现gydF4y2Ba

当代码生成器生成的代码c++接口类,它确保方法是可重入的函数。如果函数方法使用变量可以超过本地堆栈内存限制,设置的配置参数gydF4y2BaStackUsageMaxgydF4y2Ba,那么代码生成器产生私有变量的数据结构(后缀来确认的gydF4y2BaStackDatagydF4y2Ba),而不是声明变量gydF4y2Ba静态gydF4y2Ba。静态变量之间存在函数调用,不可重入的。产生凹C代码的信息,请参阅gydF4y2Ba生成和调用可重入的代码gydF4y2Ba。gydF4y2Ba

探索生成的类实现,修改功能gydF4y2BafooggydF4y2Ba这样,它包含一个变量超过最大堆栈使用指定的配置参数gydF4y2BaStackUsageMaxgydF4y2Ba。gydF4y2Ba

函数gydF4y2Ba出= foogBiggydF4y2Ba% # codegengydF4y2Ba我=眼(448);从我+ 7 = 1 (448)*;gydF4y2Ba

的默认值gydF4y2BaStackUsageMaxgydF4y2Ba以字节为单位是:gydF4y2Ba

cfg.StackUsageMaxgydF4y2Ba
ans = int32 200000gydF4y2Ba

因为gydF4y2BafooBiggydF4y2Ba使用一个变量448 ^ 2(200704)元素,和代码生成器产生一个8位整数数组来表示变量,默认的堆栈的使用限制是超过704字节。生成的代码gydF4y2BafoogBiggydF4y2Ba。gydF4y2Ba

cfg = coder.config (gydF4y2Ba“自由”gydF4y2Ba,gydF4y2Ba“是”gydF4y2Ba、假);cfg。GenCodeOnly = true;cfg。TargetLang =gydF4y2Ba“c++”gydF4y2Ba;cfg。CppInterfaceStyle =gydF4y2Ba“方法”gydF4y2Ba;cfg。CppInterfaceClassName =gydF4y2Ba“myBigClass”gydF4y2Ba;codegengydF4y2BafoogBiggydF4y2Ba配置gydF4y2BacfggydF4y2Ba报告gydF4y2Ba- dgydF4y2BawithBigClassgydF4y2Ba
代码生成成功:查看报告,打开(“withBigClass / html / report.mldatx”)gydF4y2Ba

检查生成的接口类定义gydF4y2Ba

检查的类定义gydF4y2BafoogBiggydF4y2Ba项目和gydF4y2BafooggydF4y2Ba。的gydF4y2BafoogBiggydF4y2Ba类变量可以超过最大堆栈使用存储在私有类属性,而gydF4y2BafooggydF4y2Ba类只创建局部变量在堆栈上。gydF4y2Ba

当你使用一个包含一个类定义gydF4y2BaStackDatagydF4y2Ba结构,表明该类需要的数据超过了本地堆栈的使用限制,然后分配的堆内存使用的类实例gydF4y2Ba新gydF4y2Ba。看到生成的示例主要文件为你生成的代码的一个例子。gydF4y2Ba

全局变量和持续生成的c++类gydF4y2Ba

当你和一个类生成c++代码界面,然后访问全局变量和持久类的成员。这个例子展示了如何与全局变量和持久。gydF4y2Ba

MATLAB算法gydF4y2Ba

考虑一个MATLAB函数,使计算的次数你称之为全球和持久的变量。gydF4y2Ba

函数gydF4y2Ba(po,) = countCallsgydF4y2Ba% # codegengydF4y2Ba%增加持久和全局变量gydF4y2Ba持续的gydF4y2BapgydF4y2Ba全球gydF4y2BaggydF4y2Ba如果gydF4y2Baisempty (p) p = 0;gydF4y2Ba结束gydF4y2Bap = p + 1;g = g + 1;gydF4y2Ba%设置输出变量gydF4y2Ba阿宝=双(p);去=双(g);gydF4y2Ba

生成c++代码的类接口gydF4y2Ba

对于代码生成,在工作区中初始化全局变量。gydF4y2Ba

全球gydF4y2Bag;g = 0;gydF4y2Ba

在类中生成代码gydF4y2BacountClassgydF4y2Ba。gydF4y2Ba

cfg = coder.config (gydF4y2Ba“自由”gydF4y2Ba);cfg。GenCodeOnly = true;cfg。TargetLang =gydF4y2Ba“c++”gydF4y2Ba;cfg。CppInterfaceStyle =gydF4y2Ba“方法”gydF4y2Ba;cfg。CppInterfaceClassName =gydF4y2Ba“countClass”gydF4y2Ba;codegengydF4y2BacountCallsgydF4y2Ba配置gydF4y2BacfggydF4y2Ba报告gydF4y2Ba
代码生成成功:查看报告,打开(“codegen / lib / countCalls / html / report.mldatx”)gydF4y2Ba

检查类定义gydF4y2Ba

在生成c++代码,一个初始化函数设置全局变量在工作区中您所指定的值。您还可以指定初始全球价值gydF4y2Bacodegen全局gydF4y2Ba语法。gydF4y2Ba

检查类定义在头文件的代码gydF4y2BacountClass.hgydF4y2Ba。gydF4y2Ba

类型gydF4y2Bacodegen / lib / countCalls / countClass.hgydF4y2Ba

全局变量是一个类的公共成员。从你的主要功能在需要访问这个变量。持久变量存储在一个私有类数据结构。gydF4y2Ba

把多个入口点函数在同一个班gydF4y2Ba

当你为多个入口点函数生成c++代码和使用类的接口设置,然后每个函数变成一个公共方法相同的类。您可以使用这种技术来创建一个简单的接口,您的多个入口点函数项目。gydF4y2Ba

MATLAB入口点函数gydF4y2Ba

打破这个函数gydF4y2BacountCallsgydF4y2Ba前面的例子为两个,所以一个函数调用一个持久变量和其他数的调用一个全局变量。检查这两个函数。gydF4y2Ba

函数gydF4y2Ba阿宝= countPersistentgydF4y2Ba% # codegengydF4y2Ba%增加持久变量gydF4y2Ba持续的gydF4y2BapgydF4y2Ba如果gydF4y2Baisempty (p) p = 0;gydF4y2Ba结束gydF4y2Bap = p + 1;gydF4y2Ba%设置输出变量gydF4y2Ba阿宝=双(p);gydF4y2Ba
函数gydF4y2Ba去= countGlobalgydF4y2Ba% # codegengydF4y2Ba%增加全局变量gydF4y2Ba全球gydF4y2Bag g = g + 1;gydF4y2Ba%设置输出变量gydF4y2Ba去=双(g);gydF4y2Ba

生成c++代码gydF4y2Ba

使用gydF4y2BacodegengydF4y2Ba命令并指定初始全局变量值作为输入。gydF4y2Ba

cfg = coder.config (gydF4y2Ba“自由”gydF4y2Ba);cfg。GenCodeOnly = true;cfg。TargetLang =gydF4y2Ba“c++”gydF4y2Ba;cfg。CppInterfaceStyle =gydF4y2Ba“方法”gydF4y2Ba;cfg。CppInterfaceClassName =gydF4y2Ba“countClassMulti”gydF4y2Ba;codegengydF4y2BacountGlobalgydF4y2BacountPersistentgydF4y2Ba配置gydF4y2BacfggydF4y2Ba报告gydF4y2Ba全局变量gydF4y2Ba{' g ', 0}gydF4y2Ba
代码生成成功:查看报告,打开(“codegen / lib / countGlobal / html / report.mldatx”)gydF4y2Ba

检查生成的代码gydF4y2Ba

看到生成的类定义,开放gydF4y2BacountClassMulti.hgydF4y2Ba。每个入口点函数的类是一个公共方法。gydF4y2Ba

类型gydF4y2Bacodegen / lib / countGlobal / countClassMulti.hgydF4y2Ba

另请参阅gydF4y2Ba

相关的话题gydF4y2Ba