0

我想从具有以下代码 ( 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出现错误:getIndFixedgetIndRandom

类型不匹配:function_handle getIndFixed ~= getIndRandom。

  • 有没有办法解决这个问题?
  • 例如,指定两个函数具有相同签名的方法?

在 C 中,函数的签名是:

int (*getInd)(int);
int getIndFixed(int);
int getIndRandom(int);
//...
getInd = getIndFixed;
getInd = getIndRandom;
4

1 回答 1

0

在代码生成中分配函数句柄后,您不能将它们更改为不同的函数。与“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 或 else 分支中。

于 2016-08-24T16:56:03.370 回答