主要内容

将生成的C++代码组织到命名空间中

命名空间有助于将代码组织成逻辑部分,防止名称冲突,并使您更容易将生成的C++代码集成到较大的C++项目中。命名空间也增加了安全关键代码的MISRA C++标准的符合性。本主题说明如何使用代码生成设置来自定义生成的C++代码的组织到命名空间中。

控制命名空间结构的设置

以下是代码生成设置,可用于控制在生成的代码中创建名称空间:

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

在代码配置对象中:CPP名称空间

MATLAB®编码员™应用程序:在代码外观标签,C++命名空间

包含生成的C++代码的命名空间。

如果此参数为空,则代码生成器不会创建这样的命名空间。

在代码配置对象中:''(默认)|字符向量

MATLAB编码器应用:在文本字段中指定

在代码配置对象中:CppNamespaceForMathworksCode

MATLAB编码器应用程序:在代码外观标签,MathWorks函数的命名空间

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

如果此参数为空,则代码生成器不会创建这样的命名空间。

在代码配置对象中:“编码员”(默认)|字符向量

MATLAB编码器应用:在文本字段中指定

在代码配置对象中:cpppackagestonamespace

MATLAB编码器应用程序:在代码外观标签,对C++命名空间的MATLAB封装

是否在MATLAB代码中生成包的C++命名空间。

在代码配置对象中:符合事实的(默认)|错误的

MATLAB编码器应用程序:在代码外观选项卡,选择或清除对C++命名空间的MATLAB封装复选框

有关命名空间生成的其他说明:

  • 当您指定CPP名称空间属性(或应用程序中的相应设置),代码生成器将所有生成的函数和类型定义打包到命名空间中,但中包含的泛型类型定义除外tmwtypes.h以及中特定于硬件的定义rtwtypes.h. 示例主文件和函数未打包到命名空间中。

  • 如果MATLAB代码具有嵌套包(例如,pkg1在…内pkg2),生成的命名空间具有相同的嵌套。

  • 为用于代码生成的MATLAB代码创建包时,请遵循以下准则:

    • 不要创建具有名称的包“编码员”.

    • 如果你设定CppNamespaceForMathworksCode属性(或应用程序中的等效参数)设置为非默认名称,请不要创建具有该名称的包。

示例:生成具有名称空间的C++代码

此示例演示如何使用这些代码生成设置创建名称空间。

定义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::arrayValue;};}//名称空间notmycode}//名称空间allcode#endif////string1.h的文件尾部///[EOF]//

另见

||

相关话题