首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MATLAB代码生成中为函数句柄指定函数签名?

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

Stack Overflow用户
提问于 2016-08-24 16:01:46
回答 1查看 241关注 0票数 0

我希望从具有以下代码(MATLAB R2015a)的函数编译MEX:

代码语言:javascript
复制
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 mismatchgetIndFixedgetIndRandom之间的错误:

类型错配: function_handle getIndFixed ~= getIndRandom。

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

在C中,该职能的签名如下:

代码语言:javascript
复制
int (*getInd)(int);
int getIndFixed(int);
int getIndRandom(int);
//...
getInd = getIndFixed;
getInd = getIndRandom;
EN

回答 1

Stack Overflow用户

发布于 2016-08-24 16:56:03

在代码生成中分配函数句柄后,不能将函数句柄更改为不同的函数。与"C“不同,这些函数调用是在编译时解析的。如果您的type输入是常量,那么您可以将代码编写为

代码语言:javascript
复制
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或否则分支中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39128070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档