0

私は、次のコード(MATLAB R2015a)を持つ関数からMEXをコンパイルする:MATLABコード生成で関数ハンドルの関数シグネチャを指定する方法は?

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 

私は上記の指定された行でgetIndFixedgetIndRandomtype mismatchエラーが出る:

型の不一致を:function_handle getIndFixed〜= getIndRandom。

  • この問題を回避する方法はありますか?
  • たとえば、両方の関数のシグネチャが同じであることを指定する方法はありますか?

Cでは、関数のシグネチャは次のようになります。これらは、コード生成に割り当てられた後

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

答えて

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かのように、あなたはあなたのコードを書くことができます。

関連する問題