如何在MATLAB代码生成中为函数句柄指定函数签名?

时间:2016-08-24 16:01:46

标签: matlab pointers polymorphism matlab-coder function-handle

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

  

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

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

在C中,函数的签名是:

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

1 个答案:

答案 0 :(得分: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不是常数,则需要将所有内容移动到内部,否则为分支。