文档

coder.rref

指示要通过引用传递的只读数据

描述

例子

coder.rref (参数表明参数是一个只读表达式或变量,通过引用传递给外部C/ c++函数。使用coder.rref只有在一个coder.ceval调用。

coder.rref函数可以使代码生成器对生成的代码进行优化。因为假设外部函数不写入coder.rref (arg),代码生成器可以对赋值执行表达式折叠等优化参数发生在coder.ceval调用。表达式折叠是将多个操作组合到一条语句中,以避免使用临时变量并提高代码性能。

请注意

代码生成器假设您传递的内存coder.rref (arg)是只读的。为了避免不可预测的结果,C/ c++函数不能写入这个变量。

另请参阅coder.refcoder.wref

例子

传递标量变量作为只读引用

考虑C函数addone返回常量输入加1的值:

Double addone(const Double *p) {return *p + 1;}

C函数定义输入变量p作为指向常量double的指针。

通过引用传递输入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" double use_struct(const struct MyStruct *my_struct) {return my_struct->f1 + my_struct->f2;}

C头文件,MyStruct.h,定义名为MyStruct

#ifndef MYSTRUCT #define MYSTRUCT typedef struct MYSTRUCT {double f1;双f2;} MyStruct;double 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));...

输入参数

全部折叠

参数,通过引用传递给外部C/ c++函数。参数不能是类、System对象™、单元格数组或单元格数组的索引。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑|字符|结构体
复数的支持:金宝app是的

限制

  • 不能通过引用传递这些数据类型:

    • 类或系统对象

    • 单元格数组或索引到单元格数组中

  • 如果属性具有get方法、set方法或验证器,或者具有某些属性的System对象属性,则不能通过引用将属性传递给外部函数。看到某些属性不支持通过引用传递金宝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++函数和从外部C/ c++函数的变量。

介绍了R2011a