通过一个入口点函数的输出作为输入
为多个入口点函数生成代码时,您必须指定每个函数的输入类型。使用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;
生成的代码myConstructor
和useConstructor
并把它们看作多个入口点函数,您必须指定输入类型的函数。指定的输入类型myConstructor
通过使用两个整数。为useConstructor
,指定输入类型作为输出类型myConstructor
通过使用coder.OutputType
:
v = coder.OutputType (“myConstructor”);codegenmyConstructorarg游戏{5 1}useConstructorarg游戏{v, 3}报告配置:自由
在生成的代码中,函数接口是一致的。两个入口点函数使用相同的类型定义乱涂乱画
。您可以使用构造函数生成的代码来创建一个输入类型为生成的代码useConstructor
。
例子:手动定义一个输入类型不使用coder.OutputType
如果你不使用coder.OutputType
定义的输入类型useConstructor
,您必须指定使用的输入类型coder.typeof
和coder.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
函数很容易创建和调整单独的入口点函数的接口,属于一个共同的代码库。
另请参阅
coder.StructType
|coder.typeof
|coder.varsize
|coder.cstructname
|coder.OutputType