命名空间有助于将代码组织成逻辑部分,防止名称冲突,并使您更容易将生成的C++代码集成到较大的C++项目中。命名空间也增加了安全关键代码的MISRA C++标准的符合性。本主题说明如何使用代码生成设置来自定义生成的C++代码的组织到命名空间中。
以下是代码生成设置,可用于控制在生成的代码中创建名称空间:
代码配置参数 | 描述 | 如何指定 |
---|---|---|
在代码配置对象中: 在MATLAB®编码员™应用程序:在代码外观标签,C++命名空间 |
包含生成的C++代码的命名空间。 如果此参数为空,则代码生成器不会创建这样的命名空间。 |
在代码配置对象中: 在MATLAB编码器应用:在文本字段中指定 |
在代码配置对象中: 在MATLAB编码器应用程序:在代码外观标签,MathWorks函数的命名空间 |
包含为所有MathWorks生成的代码的命名空间®代码(例如,稀疏数据类型的代码)。 如果此参数为空,则代码生成器不会创建这样的命名空间。 |
在代码配置对象中: 在MATLAB编码器应用:在文本字段中指定 |
在代码配置对象中: 在MATLAB编码器应用程序:在代码外观标签,对C++命名空间的MATLAB封装 |
是否在MATLAB代码中生成包的C++命名空间。 |
在代码配置对象中: 在MATLAB编码器应用程序:在代码外观选项卡,选择或清除对C++命名空间的MATLAB封装复选框 |
有关命名空间生成的其他说明:
当您指定CPP名称空间
属性(或应用程序中的相应设置),代码生成器将所有生成的函数和类型定义打包到命名空间中,但中包含的泛型类型定义除外tmwtypes.h
以及中特定于硬件的定义rtwtypes.h
. 示例主文件和函数未打包到命名空间中。
如果MATLAB代码具有嵌套包(例如,pkg1
在…内pkg2
),生成的命名空间具有相同的嵌套。
为用于代码生成的MATLAB代码创建包时,请遵循以下准则:
不要创建具有名称的包“编码员”
.
如果你设定CppNamespaceForMathworksCode
属性(或应用程序中的等效参数)设置为非默认名称,请不要创建具有该名称的包。
此示例演示如何使用这些代码生成设置创建名称空间。
定义MATLAB®函数
定义两个MATLAB函数福
和酒吧
在两个单独的文件中富美
和巴姆
. 放置文件巴姆
打包我的包裹
. 功能福
接受字符串输入,然后调用函数酒吧
.
类型富美
函数输出=foo(str)temp=strlength(str);out=我的包装压力(温度);终止
类型+mypackage/bar.m
函数out=bar(in)coder.inline('never');out=in+1;终止
定义代码配置对象
为静态库创建代码配置对象。将目标语言设置为C++。指定包含要命名的所有生成代码的命名空间所有代码
. 指定包含要命名的MathWorks®代码的命名空间诺特迈科
.
cfg=coder.config(“lib”); cfg.TargetLang=“C++”;cfg.cpp名称空间=“所有代码”;cfg.CppNamespaceForMathworksCode=“notmycode”;
生成代码
生成静态C++库和代码生成报告。将输入类型指定为可以具有任意长度的字符串标量。
=“我的字符串”;t=coder.typeof;t.Properties.Value=coder.typeof(“a”,[1 inf]);编码基因-配置cfg福-args{t}-报告
代码生成成功:要查看报告,请打开('codegen/lib/foo/html/report.mldatx')。
检查生成的代码
打开代码生成报告并检查生成的代码。
档案福安
包含所生成函数的声明福
.因为MATLAB函数福
如果您创建的函数不在包内,则生成的函数仅在命名空间内声明所有代码
包含所有生成代码的。
类型codegen/lib/foo/foo.h
////文件:foo.h///MATLAB编码器版本:5.2//C/C++源代码生成日期:2021年2月23日13:38:35//#ifndef foo#h//define foo#h//Include文件#Include“rtwtypes.h”#Include“string1.h”#Include#Include //函数名称空间allcode{extern double foo(const notmycode::rtString*str#endif/////foo.h///[EOF]的文件预告片//
档案酒吧
包含所生成函数的声明酒吧
. 因为你创建了MATLAB函数酒吧
包装内我的包裹
,生成的函数在命名空间层次结构中声明所有代码::myPackage
.
类型codegen/lib/foo/bar.h
////文件:bar.h///MATLAB编码器版本:5.2//C/C++源代码生成日期:2021年2月23日13:38:35//#ifndef bar_h#define bar#h//Include文件#Include“rtwtypes.h”#Include#Include //函数声明名称空间所有代码{名称空间mypackage{double bar(double in)}//名称空间allcode#endif////bar.h///[EOF]的文件尾文件//
档案第1.h条
包含所生成类的声明rtString
这实现了MATLAB字符串数据类型。因为您指示代码生成器将为MathWorks代码生成的所有代码放在名称空间中诺特迈科
,生成的类rtString
在命名空间层次结构中声明所有代码::notmycode
.
类型codegen/lib/foo/string1.h
////文件:string1.h///MATLAB编码器版本:5.2//C/C++源代码生成日期:2021年2月23日13:38:35//#ifndef string1\u h#define string1\u h//Include文件#Include“rtwtypes.h”#Include“Coder\u array.h”#Include#Include //类型定义名称空间allcode{名称空间notmycode{class rtString{public:void init(const::coder::array &b_Value);rtString();~rtString();::coder::array Value;};}//名称空间notmycode}//名称空间allcode#endif////string1.h的文件尾部///[EOF]//
coder.CodeConfig
|coder.EmbeddedCodeConfig
|coder.MexCodeConfig