当我使用Coder生成C代码时,我无法定义一个未绑定的向量。我希望有一个double 1x:inf类型的向量,稍后会在使用Coder时生成一个指向包含未绑定向量的结构的指针。
function [V2SAgent,bMove,s_Result] = V2SOnPublishedPrice(V2SAgent, oPPdata, ePochNow)
%#codegen
bMove = false;
s_Result = struct('d_BidMove', zeros(1,0),'d_AskMove', zeros(1,0),'i_VolBands', zeros(1,0));
coder.varsize('s_Result(:).d_BidMove',[1,inf],[false,true]));
coder.varsize('s_Result(:).d_AskMove',[1,inf],[false,true]));
coder.varsize('s_Result(:).i_VolBands',[1,inf],[false,true]));
coder.cstructname(s_Result, 'Move_t');
.....DOES ALOT OF WORK .....
当我用编码器处理函数时,我最终得到一个类似这样的结构。
struct emxArray_real_T_1x0
{
int size[2];
};
typedef struct {
emxArray_real_T_1x0 d_BidMove;
emxArray_real_T_1x0 d_AskMove;
emxArray_real_T_1x0 i_VolBands;
} Move_T;
emxArray_real_T_1x0类型决不是未绑定的。在其他场景中,我设法使用输入来实现我正在寻找的输出,我可以使用编码器定义时间为1x:inf,并使用它在我的函数中设置输出变量。
function s_Result = V2SOnPublishedPrice(infVector)
%#codegen
s_Result = struct('d_BidMove', zeros(1,0))
coder.varsize('s_Result(:).d_BidMove');
coder.varsize(d_BidMove);
coder.cstructname(s_Result, 'Move_t');
....SOME WORK....
s_Result.d_BidMove = infVector;
end
当把infVector定义为1x的编码器时:inf我得到这样的输出。
struct emxArray_real_T
{
double *data;
int *size;
int allocatedSize;
int numDimensions;
boolean_T canFreeData;
};
typedef struct {
emxArray_real_T *d_BidMove;
emxArray_real_T *d_AskMove;
emxArray_real_T *i_VolBands;
} Move_T;
对于我用来定义和测试我的函数的场景,这很好,但我知道我无法涵盖所有可能的输入,所以我需要一个未绑定的输出,所以我有一个统一的输入/输出在我的功能中,我不会冒大小不匹配或超出范围错误的风险。