在大多数情况下,当您为MATLAB生成代码时®函数接受或返回一个数组,则在生成的C/C++函数的接口处有一个数组。对于编译时未知的数组大小,或其绑定超过预定义阈值的数组,生成的数组的内存将在堆上动态分配。否则,生成的数组的内存将在堆栈上静态分配。看到了吗可变大小数组的控制内存分配.
如果选择C++作为代码生成的目标语言,默认情况下,动态分配的数组将被实现为类模板编码器::数组
在生成的代码中。若要在自定义C++代码中使用动态分配的数组,则与生成的C++函数集成,请学习使用编码器::数组
模板。
默认情况下,生成的C++代码使用编码器::数组
实现动态分配数组的模板。相反,您可以选择生成使用C样式的C++代码。埃姆沙雷
实现动态分配数组的数据结构。生成C样式埃姆沙雷
对于数据结构,请执行以下操作之一:
在代码配置对象中(编码器.MexCodeConfig
,编码器.CodeConfig
,或编码器.EmbeddedCodeConfig
),设置动态内存分配接口
参数到“C”
.
在MATLAB编码器™应用程序,在记忆选项卡,设置动态内存分配接口到使用C样式的EmxArray
.
了解有关使用C样式实现的静态分配数组或动态分配数组的更多信息埃姆沙雷
数据结构,请参见在生成的函数接口中使用C数组.
该表列出了生成的C++代码中动态数组表示的两种典型情况。关于编码器::数组
在生成的代码中实现动态数组的模板,请参见使用coder::array类模板.
算法描述和数组大小 |
MATLAB函数 |
生成的C++函数接口 |
---|---|---|
将1推到以30000个元素为界的可变大小行向量上。 可变大小,不在阈值范围内。 |
功能B=创建向量2%#编码基因B=零(1,0);编码器.varsize(“B”,[1 30000],[0 1]);对于i=1:500如果圆(rand)B=[1 B];结束结束 |
void create_vec2(编码器::数组 |
创建大小由无界整数输入决定的数组。 编译时未知。 |
功能y=创建向量3(n)%#编码基因y=int8(一(1,n)); |
void create_vec3(双n,coder::array |
编码器::数组
类模板当生成用于Matlab函数的C++代码时,代码生成器生成头文件。编码器数组.h
在生成文件夹中。此头文件包含类模板的定义数组
在命名空间中编码器
. 这个编码器::数组
模板在生成的代码中实现动态分配的数组。此模板的声明为:
模板类数组
T
而且已经N
尺寸。例如,声明一个二维动态数组我的数组
包含类型为国际32\T
在您的自定义C++代码中,使用:
编码器::数组myArray
要在您想与生成代码集成的自定义C++代码中使用动态分配的数组(例如,自定义main函数),请将编码器数组.h
自定义文件中的头文件.cpp文件
文件夹。此表显示了您在自定义C++代码中使用的API,用于创建和与动态数组交互。
行动 |
说明 |
---|---|
声明动态数组 |
使用 编码器::数组 |
为分配内存 |
使用 myArray.set\u大小(1100) 如果 |
访问的大小向量 |
访问 myArray.size(1) |
索引到动态数组中 |
使用标准的C++语法来进行数组索引。例如,设置 我的数组[i]=i |
定义MATLAB函数xTest1型
接受数组的十
,添加标量A.
并返回结果数组Y
.
功能Y=xTest1(X,A)Y=X;对于i=1:numel(X)Y(i)=X(i)+A;结束
您的目标是生成C++可执行文件xTest1型
可以接受并返回国际32\T
元素。您希望数组的第一个维度是singleton,第二个维度是unbounded。
在文件中定义C++主函数xTest1\u主.cpp
在当前工作文件夹中。
#include#include #include int main(int argc,char*argv[]){static_cast (argc);静态铸造 (argv);编码器::数组 myArray;myArray.set\ u size(1100);对于(int i=0;i myResult;xTest1(myArray,1000,myResult);对于(int i=0;i 0)std::cout<<“”;标准::cout<
此主要功能包括头文件编码器数组.h
包含编码器::数组
类模板定义。main函数使用上一节表格中描述的API执行以下操作:
声明我的数组
和我的结果
作为二维动态数组国际32\T
元素。
动态设置图形的两个维度的大小我的数组
到1.
和100
通过使用设置\u大小
方法。
访问的大小向量我的结果
通过使用myResult.size文件
.
通过运行此脚本生成代码。替换'C:\工作'
当前工作文件夹的路径。
cfg=编码器配置('执行'); cfg.TargetLang公司='C++'; cfg.CustomSource文件='xTest1\u main.cpp'; cfg.CustomInclude包括='C:\工作'; 编码基因-配置cfg公司-参数{coder.typeof(int32(0),[1 inf]),int32(0)}xTest1\u主.cppxTest1.m公司-报告
代码生成器生成一个可执行文件xTest1.exe文件
在当前工作文件夹中。
定义MATLAB函数xStringTest公司
接受字符向量的str公司
,插入str公司
在字符向量之间'你好'
和“世界!”
,并返回结果。您的目标是从C++中生成C++可执行文件。xStringTest公司
.
功能y=xStringTest(str)断言(isa(str,'字符')); 断言(大小(str,1)==1);断言(大小(str,2)>=0);y=['你好'str公司“世界!”];
在文件中定义C++主函数xStringTest\u main.cpp
在当前工作文件夹中。此主要功能使用标准::向量
声明向量向量
属于字符
传递给生成的C++函数的元素xStringTest公司
.
#include#include #include int main(int,char*[]){coder::array 结果;标准::向量 vec;矢量调整(10);对于(尺寸i=0;i<10;i++){vec[i]=static\u cast ('A'+i);}xStringTest(vec,结果);std::cout<<“结果是”< (结果)<
通过运行此脚本生成代码。替换'C:\工作'
使用当前工作文件夹。
cfg=编码器配置('执行'); cfg.TargetLang公司='C++'; cfg.CustomSource文件='xStringTest\u main.cpp'; cfg.CustomInclude包括='C:\工作'; 编码基因-配置cfg公司-参数{coder.typeof(char('X'),[1 inf])}xStringTest\u main.cppxStringTest.m公司-报告
代码生成器生成一个可执行文件xStringTest.exe文件
在当前工作文件夹中。