主要内容

使用动态分配的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++代码。

行动

指令

声明一个动态数组myArray包含的元素类型int32_T。集的维数myArray2

使用编码器:数组模板。指定元素类型和数量的维度。

编码器::< int32_T 2 > myArray数组

分配内存myArray。设置第一维的大小1第二个维度One hundred.

使用set_size方法。

myArray。set_size(1, 100)

如果尺寸myArray后来在执行期间变化,基于新生成的代码是重新分配内存大小。

访问向量的大小myArray

访问大小数组,该数组是一个数据成员myArray。例如,访问的第二维的大小myArray使用:

myArray.size (1)

动态数组的索引myArray

使用标准c++数组索引的语法。例如,设置th元素myArray等于使用:

myArray[我]=我

你也可以索引到多维数组使用标准c++语法或使用方法。

myArray[我][j] =我*;/ /还可以使用“在”函数myArray.at (i, j) =我* j;

创建编码器:数组变量std:: stringstd::向量数组。

使用拷贝构造函数创建编码器:数组数组的std:: stringstd::向量数组。例如,要创建一个编码器:数组的副本std::向量数组vec使用:

std::向量< int32_T >矢量;/ /创建编码器:数组复制编码器:数组< int32, 2 > copyArray (vec);

使用copyArray接口生成的代码与您的项目。

例子

下面的例子展示如何生成c++代码接受并返回适应数字和字符数组。使用动态分配的数组包含在您的自定义c++代码coder_array.h在您的自定义头文件. cpp文件。的编码器:数组类模板的方法,允许您分配和释放内存数组。

你也可以与数组接口生成的代码std::向量std:: string作为动态数组大小。这些数组也可以用作输入生成的功能。看到生成c++代码,接受的字符,并返回一个适应可变向量

生成c++代码接受并返回一个适应数字数组

这个例子展示了如何定制生成的示例主要功能使用编码器:数组类模板在您的项目中。见上面的表格信息相关的方法。

你的目标是生成一个c++执行xTest1能够接受和返回的数组int32_T元素。你想让数组的第一个维度是单例,第二个维度是无界的。

  1. 定义一个MATLAB函数xTest1接收一个数组X,添加了标量一个它的每个元素,并返回结果数组中Y

    函数Y = xTest1 Y = X (X);i = 1:元素个数(X) Y (i) = X(我)+一个;结束
  2. 生成初始源代码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)

    接口生成的代码提供了输入和输出数组与上面所示的函数原型。

  3. 定义一个c++文件中的主要功能xTest1_main.cpp在你当前的工作目录。

    这主要功能包括头文件coder_array.h包含编码器:数组类模板定义。主要功能使用桌子上一节中描述的API来执行这些操作:

    • 声明myArraymyResult二维动态数组int32_T元素。

    • 动态设置的两个维度的大小myArray1One 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; }
  4. 通过运行这个脚本生成代码:

    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::向量要申报的向量vecchar_T元素传递给生成c++函数xStringTest

  1. 定义一个MATLAB函数xStringTest接受一个特征向量str、插入str之间的特征向量“你好”“世界!”,并返回结果。你的目标是生成一个c++执行xStringTest

    函数y = xStringTest (str)断言(isa (str,“字符”));断言(大小(str, 1) = = 1);断言(大小(str, 2) > = 0);y = (“你好”str“世界!”];
  2. 生成的源代码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)

    接口生成的代码提供了输入和输出数组与上面所示的函数原型。

  3. 定义一个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;}
  4. 通过运行这个脚本生成代码。

    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数据结构,做以下之一:

学习更多的关于静态分配的数组或动态分配的数组实现通过使用C风格emxArray数据结构,请参阅使用C数组生成的函数接口

另请参阅

|

相关的话题