主要内容

生成c++代码组织成名称空间

名称空间帮助组织你的代码逻辑部分,防止名称冲突,使您能够更容易地生成c++代码集成到一个更大的c++项目。名称空间也会增加遵守MISRA c++标准安全性至关重要的代码。这一主题解释了如何使用代码生成设置来定制生成c++代码组织成名称空间。

设置控制命名空间结构

这些代码生成设置使您能够控制在生成的代码中创建名称空间:

代码配置参数 描述 如何指定

在一个代码配置对象:CppNamespace

MATLAB®编码器™应用:代码的外观选项卡,c++名称空间

名称空间,其中包含生成的c++代码。

如果该参数为空,代码生成器并不创建这样一个名称空间。

在一个代码配置对象:(默认)|特征向量

MATLAB编码器应用:指定一个文本字段

在一个代码配置对象:CppNamespaceForMathworksCode

MATLAB编码器应用:代码的外观选项卡,名称空间MathWorks函数

名称空间,其中包含所有MathWorks生成的代码®代码(例如,稀疏的数据类型的代码)。

如果该参数为空,代码生成器并不创建这样一个名称空间。

在一个代码配置对象:“编码器”(默认)|特征向量

MATLAB编码器应用:指定一个文本字段

在一个代码配置对象:CppPackagesToNamespaces

MATLAB编码器应用:代码的外观选项卡,MATLAB c++名称空间

是否生成c++名称空间的软件包MATLAB代码。

在一个代码配置对象:真正的(默认)|

MATLAB编码器应用:代码的外观选项卡上,选择或清除MATLAB c++名称空间复选框

关于名称空间的额外指出生成:

  • 当你指定CppNamespace财产(或相应的设置在应用程序),生成的代码生成器包所有的功能和类型定义名称空间,除了包含在泛型类型定义tmwtypes.h和特定于硬件的定义rtwtypes.h。主文件和函数的例子不打包成名称空间。

  • 如果你的MATLAB代码嵌套包装(例如,pkg1内部pkg2这),生成的名称空间具有相同的嵌套。

  • 当创建包的MATLAB代码用于代码生成,遵循这些指导方针:

    • 不创建一个包有名字吗“编码器”

    • 如果你设置CppNamespaceForMathworksCode财产(或等效参数的应用程序)默认的名字,这个名字不创建一个包。

例子:生成c++代码与名称空间

这个例子展示了如何使用这些代码生成设置创建名称空间。

定义MATLAB®函数

定义两个MATLAB函数喷火酒吧在两个独立的文件foo.mbar.m。把文件bar.m在一个包myPackage。这个函数喷火接受一个字符串输入,然后调用函数酒吧

类型foo.m
函数= foo (str) temp = strlength (str);= mypackage.bar(临时);结束
类型+ mypackage / bar.m
函数= bar () coder.inline(“从未”);= + 1;结束

定义代码配置对象

创建一个配置对象的静态代码库。设置目标语言c++。指定命名空间包含所有生成的代码allcode。指定名称空间,其中包含MathWorks®代码命名notmycode

cfg = coder.config (“自由”);cfg。TargetLang =“c++”;cfg。CppNamespace =“allcode”;cfg。CppNamespaceForMathworksCode =“notmycode”;

生成代码

生成一个静态的c++库和代码生成报告。指定输入类型是字符串标量可以拥有任意长度。

t = coder.typeof (“字符串”);t。StringLength =正;%设置t。StringLength正自动设置t。VariableStringLength来%真实codegen配置cfg喷火arg游戏{t}报告
代码生成成功:查看报告,打开(“codegen / lib / foo / html / report.mldatx”)

检查生成的代码

打开代码生成报告和检查生成的代码。

该文件foo。包含生成的函数的声明喷火。由于MATLAB函数喷火您不是在一个包中,创建生成的函数声明仅在名称空间allcode包含所有生成的代码。

类型codegen / lib / foo / foo
/ / / /文件:foo。h / / / / MATLAB编码器版本:5.6 / / C / c++源代码生成:03 - mar - 2023 05:01:54 / / ifndef FOO_H # define FOO_H / / #包括“rtwtypes包括文件。h string1 # include。h”# include < cstddef > # include < cstdlib > / /函数声明名称空间allcode{走读生双foo (const notmycode:: rtString * str);}# endif预告片foo / / / /文件。(EOF) h / / / / / /

该文件bar.h包含生成的函数的声明酒吧。因为你创造了MATLAB函数酒吧内包mypackage内,生成的函数声明名称空间的层次结构allcode: myPackage

类型codegen / lib / foo / bar.h
/ / / /文件:酒吧。h / / / / MATLAB编码器版本:5.6 / / C / c++源代码生成:03 - mar - 2023 05:01:54 / / ifndef BAR_H # define BAR_H / / #包括“rtwtypes包括文件。h”# include < cstddef > # include < cstdlib > / /函数声明名称空间allcode{名称空间mypackage{双杆(双);}}/ /命名空间allcode # endif预告片吧/ / / /文件。(EOF) h / / / / / /

该文件string1.h包含生成的类的声明rtString实现MATLAB的字符串数据类型。因为你指示代码生成器将所有代码产生MathWorks代码命名空间内notmycode,生成的类rtString声明名称空间内的层次allcode: notmycode

类型codegen / lib / foo / string1.h
/ / / /文件:string1。h / / / / MATLAB编码器版本:5.6 / / C / c++源代码生成:03 - mar - 2023 05:01:54 / / ifndef STRING1_H # define STRING1_H / / #包括“rtwtypes包括文件。h coder_array # include。h”# include < cstddef > # include < cstdlib > / /类型定义名称空间allcode{名称空间notmycode{类rtString{公众:空白init (const:编码器:数组< char、2 u > &b_Value);rtString ();~ rtString ();::编码器::< char、2 u >数组值;};}/ /命名空间notmycode} / /命名空间allcode #预告片string1 endif / / / /文件。(EOF) h / / / / / /

另请参阅

||

相关的话题