使用动态分配的c++数组生成的函数接口
在大多数情况下,当你为MATLAB生成代码®函数接受或返回一个数组,数组在接口生成的C / c++函数。数组大小,在编译时是未知的,或其绑定超出了预先定义的阈值,生成的数组的内存动态分配在堆上。否则,生成的数组的内存是静态分配在堆栈上。看到控制内存分配适应可变数组。
如果你选择c++作为代码生成目标语言,默认情况下,动态分配的数组被实现为一个类模板编码器:数组
在生成的代码。使用动态分配的数组在定制c++代码与生成的c++函数,集成学习使用编码器:数组
模板。
使用编码器:数组
类模板
当你为你的MATLAB函数生成c++代码,代码生成器生成头文件coder_array.h
在构建文件夹。这个头文件包含的定义类模板数组
的命名空间编码器
。的编码器:数组
模板生成的代码实现了动态分配的数组。这个模板的声明:
模板< typename T, int32_T N >类数组
T
并已N
维度。例如,声明一个二维动态数组myArray
包含的元素类型int32_T
在定制c++代码中,使用:
编码器::< int32_T 2 > myArray数组
使用定制c++代码中动态分配的数组要集成生成的代码(例如,一个自定义的主要功能),包括coder_array.h
在您的自定义头文件. cpp
文件。这个表显示您所使用的API来创建和相互作用动态数组定制c++代码。
行动 |
指令 |
---|---|
声明一个动态数组 |
使用 编码器::< int32_T 2 > myArray数组 |
分配内存 |
使用 myArray。set_size(1, 100) 如果尺寸 |
访问向量的大小 |
访问 myArray.size (1) |
动态数组的索引 |
使用标准c++数组索引的语法。例如,设置 myArray[我]=我 你也可以索引到多维数组使用标准c++语法或使用 myArray[我][j] =我*;/ /还可以使用“在”函数myArray.at (i, j) =我* j; |
创建 |
使用拷贝构造函数创建 std::向量< int32_T >矢量;/ /创建编码器:数组复制编码器:数组< int32, 2 > copyArray (vec); 使用 |
例子
下面的例子展示如何生成c++代码接受并返回适应数字和字符数组。使用动态分配的数组包含在您的自定义c++代码coder_array.h
在您的自定义头文件. cpp
文件。的编码器:数组
类模板的方法,允许您分配和释放内存数组。
你也可以与数组接口生成的代码std::向量
或std:: string
作为动态数组大小。这些数组也可以用作输入生成的功能。看到生成c++代码,接受的字符,并返回一个适应可变向量。
生成c++代码接受并返回一个适应数字数组
这个例子展示了如何定制生成的示例主要功能使用编码器:数组
类模板在您的项目中。见上面的表格信息相关的方法。
你的目标是生成一个c++执行xTest1
能够接受和返回的数组int32_T
元素。你想让数组的第一个维度是单例,第二个维度是无界的。
定义一个MATLAB函数
xTest1
接收一个数组X
,添加了标量一个
它的每个元素,并返回结果数组中Y
。函数Y = xTest1 Y = X (X);为i = 1:元素个数(X) Y (i) = X(我)+一个;结束
生成初始源代码
xStringTest
和移动xTest1.h
从代码生成文件夹到你当前的文件夹。使用以下命令:cfg = coder.config (“自由”);cfg。TargetLang =“c++”;codegen配置cfgarg游戏{coder.typeof (int32(0)[1正]),int32 (0)}xTest1.m报告
的函数原型
xTest1
在生成的代码中所示:空白xTest1 (const编码器:数组< int, 2 u > x, int,编码器::数组< int, 2 u > y)
接口生成的代码提供了输入和输出数组与上面所示的函数原型。
定义一个c++文件中的主要功能
xTest1_main.cpp
在你当前的工作目录。这主要功能包括头文件
coder_array.h
包含编码器:数组
类模板定义。主要功能使用桌子上一节中描述的API来执行这些操作:声明
myArray
和myResult
二维动态数组int32_T
元素。动态设置的两个维度的大小
myArray
来1
和One hundred.
通过使用set_size
方法。访问向量的大小
myResult
通过使用myResult.size
。
# include < iostream > # include < coder_array。h > # include < xTest1。h > int主要(int命令行参数个数,char * argv []) {static_cast <空白>(命令行参数个数);static_cast <空白> (argv);/ /实例化使用编码器的输入变量:数组模板编码器::< int32_T 2 > myArray数组;/ /数组myArray分配初始内存。set_size (100);/ /访问与标准c++数组索引(int i = 0;我< myArray.size (1);我+ +){myArray[我]=我;}/ /实例化结果变量,利用编码器:数组模板编码器::< int32_T 2 > myResult数组;/ /传递的输入和结果数组生成函数xTest1(1000年myArray myResult); for (int i = 0; i < myResult.size(1); i++) { if (i > 0) std::cout << " "; std::cout << myResult[i]; if (((i+1) % 10) == 0) std::cout << std::endl; } std::cout << std::endl; return 0; }
通过运行这个脚本生成代码:
cfg = coder.config (exe”);cfg。TargetLang =“c++”;cfg。CustomSource =“xTest1_main.cpp”;cfg。CustomInclude =“。”;%当前工作目录codegen配置cfgarg游戏{coder.typeof (int32(0)[1正]),int32 (0)}xTest1_main.cppxTest1.m报告
代码生成器生成一个可执行文件xTest1.exe
在你当前的工作目录。
生成c++代码,接受的字符,并返回一个适应可变向量
这个例子展示了如何定制生成的示例主要文件接口和生成的代码通过使用字符串数组编码器:数组
类方法。
这个示例使用的主要功能std::向量
要申报的向量vec
的char_T
元素传递给生成c++函数xStringTest
。
定义一个MATLAB函数
xStringTest
接受一个特征向量str
、插入str
之间的特征向量“你好”
和“世界!”
,并返回结果。你的目标是生成一个c++执行xStringTest
。函数y = xStringTest (str)断言(isa (str,“字符”));断言(大小(str, 1) = = 1);断言(大小(str, 2) > = 0);y = (“你好”str“世界!”];
生成的源代码
xStringTest
和移动xStringTest.h
从代码生成文件夹到你当前的工作目录。使用以下命令:cfg = coder.config (“自由”);cfg。TargetLang =“c++”;codegen配置cfgarg游戏{coder.typeof (char (“X”),[1正])}xStringTest.m报告
在报告中,检查的函数原型
xStringTest
在生成的代码。空白xStringTest (const编码器:数组< char、2 u > str,编码器::数组< char、2 u > y)
接口生成的代码提供了输入和输出数组与上面所示的函数原型。
定义一个c++文件中的主要功能
xStringTest_main.cpp
在你当前的工作目录。这个主要功能使用定义了数组作为输入
std::向量
的数组char_T
。的为
循环初始化vec
的字符值“一个”
来“J”
。这个数组的输入生成的函数xStringTest
。的输出函数返回的编码器:数组
变量结果
。# include < iostream > # include < coder_array。h > # include < xStringTest。main (int、char * h > int[]){/ /实例化结果变量,利用编码器::数组模板编码器::数组< char_T 2 >结果;/ /实例化输入变量通过std::向量std:: string矢量;/ /调整所需的输入包括价值观vec.resize (10);vec = " ABCDEFGHIJ”;/ /传递的输入和结果数组生成的函数接口xStringTest(矢量,结果);/ /把编码器:数组的结果变量std:: string来显示它std:: cout < <“结果”;std:: cout < < static_cast < std:: string >(结果)< < std:: endl;返回0;}
通过运行这个脚本生成代码。
cfg = coder.config (exe”);cfg。TargetLang =“c++”;cfg。CustomSource =“xStringTest_main.cpp”;cfg。CustomInclude =“。”;%当前工作目录codegen配置cfgarg游戏{coder.typeof (char (“X”),[1正])}xStringTest_main.cppxStringTest.m报告
代码生成器生成一个可执行文件xStringTest.exe
在你当前的工作目录。
改变界面生成
默认情况下,生成的c++代码使用编码器:数组
模板来实现动态分配的数组。相反,您可以选择生成c++代码,使用C风格emxArray
数据结构来实现动态分配的数组。生成C风格emxArray
数据结构,做以下之一:
在一个代码配置对象(
coder.MexCodeConfig
,coder.CodeConfig
,或coder.EmbeddedCodeConfig
),设置DynamicMemoryAllocationInterface
参数“C”
。在MATLAB编码器™应用程序,内存选项卡,设置动态内存分配界面来
使用C样式EmxArray
。
学习更多的关于静态分配的数组或动态分配的数组实现通过使用C风格emxArray
数据结构,请参阅使用C数组生成的函数接口。