coder.rref
显示只读数据以引用的方式传递
描述
coder.rref (
表明参数
)参数
是一个只读的表达式或变量通过引用一个外部C / c++函数。使用coder.rref
只有在一个coder.ceval
调用。
的coder.rref
函数可以使代码生成器生成的代码优化。因为外部函数被认为不写coder.rref (arg)
,代码生成器可以执行优化表达折叠等作业参数
之前和之后发生的coder.ceval
调用。表达折叠是多个操作的结合到一个声明中避免使用临时变量和提高代码性能。
请注意
代码生成器假定你通过的记忆coder.rref (arg)
是只读的。为了避免不可预知的结果,C / c++函数不能写信给这个变量。
另请参阅coder.ref
和coder.wref
。
例子
通过标量变量作为一个只读的参考
考虑到C函数addone
返回的值常数输入+ 1:
双addone (const双* p){返回* p + 1;}
C函数定义了输入变量p
作为一个指针指向一个常数翻倍。
通过输入通过引用addone
:
…y = 0;u = 42;y = coder.ceval (“addone”,coder.rref (u));…
作为一个只读引用传递多个参数
…u = 1;v = 2;y = coder.ceval (“my_fcn”coder.rref (u), coder.rref (v));…
通过类属性为只读引用
…x = myClass;x。prop = 1; y = coder.ceval(“foo”coder.rref (x.prop));…
通过结构作为一个只读的参考
表明C头文件中定义的结构类型,使用coder.cstructname
。
假设您的C函数use_struct
。这个函数读取从输入参数但是不写。
# include“MyStruct。h“双重use_struct (const struct MyStruct * my_struct){返回my_struct - > f1 + my_struct - > f2;}
C头文件,MyStruct.h
,定义一个结构类型命名MyStruct
:
的ifndef MYSTRUCT # define MYSTRUCT typedef struct MYSTRUCT{双f1;双f2;}MyStruct;双use_struct (const struct MyStruct * my_struct);# endif
MATLAB中®函数,通过结构作为一个只读的参考use_struct
。表明结构类型年代
有名字MyStruct
这是C头文件中定义的MyStruct.h
,使用coder.cstructname
。
函数y = foo% # codegeny = 0;coder.updateBuildInfo (“addSourceFiles”,“use_struct.c”);s =结构(“f1”,1“f2”2);coder.cstructname(年代,“MyStruct”,“外来的”,“HeaderFile”,“MyStruct.h”);y = coder.ceval (“use_struct”coder.rref (s));
生成独立的库代码,请输入:
codegen配置:自由喷火报告
通过结构字段为只读引用
…s =结构(“s1 '结构(“一个”[0,1]));y = coder.ceval (“foo”coder.rref (s.s1.a));…
你也可以通过结构的一个元素的数组:
…c = repmat(结构体(“u”魔法(2)1 10);b = repmat(结构体(“c”c) 3、6);一个=结构(“b”,b);coder.ceval (“foo”coder.rref (a.b (3, 4) . c (2) .u));…
输入参数
限制
你不能通过引用传递这些数据类型:
类或系统对象
单元阵列或索引单元阵列
如果一个属性的get方法,一组方法,或验证器,或者是一个系统对象属性与某些属性,那么你不能通过财产通过引用一个外部函数。看到按引用传递一些属性的不支持金宝app。
提示
如果
参数
是一个数组,然后呢coder.rref (arg)
提供了数组的第一个元素的地址。的coder.rref (arg)
功能不包含数组的大小的信息。如果C函数必须知道的元素数量的数据,通过这些信息作为一个单独的参数。例如:coder.ceval (“myFun”coder.rref (arg)、int32(元素个数(arg));
当你通过结构通过引用一个外部C / c++函数,使用
coder.cstructname
提供一个C结构类型的名称是一个C头文件中定义。在MATLAB中,
coder.rref
会导致错误。用参数表示MATLAB代码,以便它可以运行在MATLAB和生成的代码,使用coder.target
。您可以使用
coder.opaque
声明变量传递给和从外部C / c++函数。