我希望从具有以下代码(MATLAB R2015a)的函数编译MEX:
function r = MyFunc(x,type)
ind = randi(numel(x), 1);
getInd = @getIndFixed;
if strcmpi(type, 'random')
ind = numel(x);
getInd = @getIndRandom; % error here
end
x(getInd(ind)) = 1;
end
function k = getIndFixed(n)
k = n;
end
function k = getIndRandom(n)
k = randi(n, 1);
end我在上面指定的行中得到了type mismatch与getIndFixed和getIndRandom之间的错误:
类型错配: function_handle getIndFixed ~= getIndRandom。
在C中,该职能的签名如下:
int (*getInd)(int);
int getIndFixed(int);
int getIndRandom(int);
//...
getInd = getIndFixed;
getInd = getIndRandom;发布于 2016-08-24 16:56:03
在代码生成中分配函数句柄后,不能将函数句柄更改为不同的函数。与"C“不同,这些函数调用是在编译时解析的。如果您的type输入是常量,那么您可以将代码编写为
function r = MyFunc(x,type)
if strcmpi(type, 'random')
ind = numel(x);
getInd = @getIndRandom; % error here
else
ind = randi(numel(x), 1);
getInd = @getIndFixed;
end
x(getInd(ind)) = 1;
end如果type不是常量,则需要将所有东西都移动到If或否则分支中。
https://stackoverflow.com/questions/39128070
复制相似问题