主要内容

通过一个入口点函数的输出作为输入

为多个入口点函数生成代码时,您必须指定每个函数的输入类型。使用coder.OutputType,你可以通过一个函数的输出类型作为另一个函数的输入类型。例如,使用第二个输出函数的类型foo1作为一个函数的输入类型foo2,输入:

codegenfoo1arg游戏{7,42}foo2arg游戏{coder.OutputType (' foo1 ', 2)}

您还可以使用coder.OutputType为了便于分区的过程,组件化,或延长您的代码库。例如,当你的MATLAB®代码使用或接受一个复杂,聚合数据类型,考虑创建一个单独的构造函数,创建数据类型。然后,使用多个入口点函数,生成代码coder.OutputType通过构造函数的输出类型其他入口点函数。

有关使用多个入口点函数的更多信息,请参阅为多个入口点函数生成代码

一个入口点函数的输出作为输入传递给另一个入口点函数

coder.OutputType函数提供了一种连锁在一起的入口点函数,使用相同的数据类型。使用coder.OutputType:

  • 简化输入类型规范的过程。当现有的入口点函数创建或定义一个数据类型,您可以重用定义输入到一个不同的入口点函数。

  • 之间的同步和一致的数据入口点函数。当你使用coder.OutputType通过数据类型,只有单一来源类型定义,定义两个函数使用。

理解这些优势,比较两种情况下,你在使用和不使用生成代码coder.OutputType

例如:重用一个嵌套结构输出类型作为输入类型

假设你有一个复杂的数据类型,对代码库很重要。有多个入口点函数依赖这些数据类型的输入,输出,和内部计算。你需要生成的函数代码之间的接口使用相同的类型定义。

对于本示例,假设数据类型是一个嵌套结构,以适应可变数组存储在体现财产。你想要的名字这个结构类型乱涂乱画在生成的代码。在MATLAB中,你写一个数据类型构造函数调用myConstuctor:

函数[出]= myConstructor (a, b)%创建一个大小可变的数组与上界的100 - 100coder.varsize (“myStruct.f1.f2.f3.f4”100年[100],[1]);%定义嵌套结构类型struct myStruct = (“f1”结构(“f2”结构(‘f3’结构(“f4”0 (a, b)))));%指定名称的结构和它的一个字段coder.cstructname (myStruct.f1.f2.f3“squiggle_f3”);coder.cstructname (myStruct“蠕动”);= myStruct;

你写一个函数,useConstructor这需要乱涂乱画类型作为输入,执行,并将额外的列数据的结束。

函数x = useConstructor (x, n) xz = x.f1.f2.f3.f4;b = 0(大小(xz, 1), 1);i = 1: n xz = [(xz +π),b];结束x.f1.f2.f3。f4 = xz;

生成的代码myConstructoruseConstructor并把它们看作多个入口点函数,您必须指定输入类型的函数。指定的输入类型myConstructor通过使用两个整数。为useConstructor,指定输入类型作为输出类型myConstructor通过使用coder.OutputType:

v = coder.OutputType (“myConstructor”);codegenmyConstructorarg游戏{5 1}useConstructorarg游戏{v, 3}报告配置:自由

在生成的代码中,函数接口是一致的。两个入口点函数使用相同的类型定义乱涂乱画。您可以使用构造函数生成的代码来创建一个输入类型为生成的代码useConstructor

例子:手动定义一个输入类型不使用coder.OutputType

如果你不使用coder.OutputType定义的输入类型useConstructor,您必须指定使用的输入类型coder.typeofcoder.StructType类的属性:

% MATLAB蠕动的类型定义struct myStruct = (“f1”结构(“f2”结构(‘f3’结构(“f4”,0 (2)))));t = coder.typeof (myStruct);t.Fields.f1.Fields.f2.Fields.f3.Fields。f4 = coder.typeof(0(2), 100年[100],[1]);t.Fields.f1.Fields.f2.Fields.f3。TypeName =“squiggle_f3”;t。TypeName =“蠕动”;

生成静态库代码,请输入:

codegenmyConstructorarg游戏{5 1}useConstructorarg游戏{t, 3}报告配置:自由

在第一个例子中,函数接口是一致的。然而,创建和维护的类型定义乱涂乱画是劳动密集型的。改变你的类型定义必须被复制在两个地方:myConstructor功能和当前工作空间变量t。这些变化可以脱落的同步,尤其是在处理复杂类型定义。使用coder.OutputType协助您的开发过程。

使用coder.OutputType为了便于代码组件化

如果你的MATLAB代码使用大型、复杂或聚合类型定义,您可以单独的代码到不同的入口点函数组件(如构造函数和一个操作符)和使用coder.OutputType通过它们之间的类型定义。的coder.OutputType功能使您能够确保一个匹配不同的入口点函数之间的接口。

例子:创建一个构造函数和使用coder.OutputType通过输出类型

考虑到功能useSparse执行一个操作在一个稀疏矩阵的输入。

函数= useSparse(中)% # codegen= * 2;

如果您生成代码useSparse,您必须手动构造适当的输入类型在C / c++。自动化和简化式结构,编写一个稀疏矩阵的构造函数。

函数= makeSparse (i, j, v, m, n)% # codegen=稀疏(i, j, v, m, n);

生成的代码,使用coder.OutputType通过构造函数的输出作为输入useSparse。你的输入参数定义为一个三五矩阵。

t = coder.OutputType (“makeSparse”);S =圆(兰德(3、5));[m, n] =大小(S);(i, j, v) =找到(S);我=编码器。typeof(i,[inf 1]);%允许非零项数量有所不同codegenmakeSparsearg游戏{我,我,我,m, n}useSparsearg游戏{t}报告

使用生成的C / c++代码中,您可以调用makeSparse生成的输入useSparse。的coder.OutputType函数很容易创建和调整单独的入口点函数的接口,属于一个共同的代码库。

另请参阅

||||

相关的话题