生成c++代码组织成名称空间
名称空间帮助组织你的代码逻辑部分,防止名称冲突,使您能够更容易地生成c++代码集成到一个更大的c++项目。名称空间也会增加遵守MISRA c++标准安全性至关重要的代码。这一主题解释了如何使用代码生成设置来定制生成c++代码组织成名称空间。
设置控制命名空间结构
这些代码生成设置使您能够控制在生成的代码中创建名称空间:
代码配置参数 | 描述 | 如何指定 |
---|---|---|
在一个代码配置对象: 在MATLAB®编码器™应用:代码的外观选项卡,c++名称空间 |
名称空间,其中包含生成的c++代码。 如果该参数为空,代码生成器并不创建这样一个名称空间。 |
在一个代码配置对象: 在MATLAB编码器应用:指定一个文本字段 |
在一个代码配置对象: 在MATLAB编码器应用:代码的外观选项卡,名称空间MathWorks函数 |
名称空间,其中包含所有MathWorks生成的代码®代码(例如,稀疏的数据类型的代码)。 如果该参数为空,代码生成器并不创建这样一个名称空间。 |
在一个代码配置对象: 在MATLAB编码器应用:指定一个文本字段 |
在一个代码配置对象: 在MATLAB编码器应用:代码的外观选项卡,MATLAB c++名称空间 |
是否生成c++名称空间的软件包MATLAB代码。 |
在一个代码配置对象: 在MATLAB编码器应用:代码的外观选项卡上,选择或清除MATLAB c++名称空间复选框 |
关于名称空间的额外指出生成:
当你指定
CppNamespace
财产(或相应的设置在应用程序),生成的代码生成器包所有的功能和类型定义名称空间,除了包含在泛型类型定义tmwtypes.h
和特定于硬件的定义rtwtypes.h
。主文件和函数的例子不打包成名称空间。如果你的MATLAB代码嵌套包装(例如,
pkg1
内部pkg2这
),生成的名称空间具有相同的嵌套。当创建包的MATLAB代码用于代码生成,遵循这些指导方针:
不创建一个包有名字吗
“编码器”
。如果你设置
CppNamespaceForMathworksCode
财产(或等效参数的应用程序)默认的名字,这个名字不创建一个包。
例子:生成c++代码与名称空间
这个例子展示了如何使用这些代码生成设置创建名称空间。
定义MATLAB®函数
定义两个MATLAB函数喷火
和酒吧
在两个独立的文件foo.m
和bar.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 / / / / / /
另请参阅
coder.CodeConfig
|coder.EmbeddedCodeConfig
|coder.MexCodeConfig