2017-10-09 1 views
0

mexCallMATLAB(nlhs, plhs, nrhs, prhs, "foo")コマンドを使用すると、C++からMATLABで書かれた関数(ここでは "foo.m")を呼び出すことができます。C++からmatlabメンバ関数を呼び出すにはどうすればよいですか?

"foo"がクラスのメソッドの場合はどうなりますか?

classdef Foo < handle 
    ... 
    function out = foo(obj, in) 
     ... 
    end 
end 

C++からMATLABクラスメンバ関数を呼び出す方法は簡単ですか?

+1

あなたは[R2017bに追加](https://www.mathworks.com/help/matlab/release-notes.html?rntext=&startrelease=R2017b&endrelease=R2017b&category=Advanced+Software+Development)が欲しいと思います。 )、数週間前にリリースされました。 [このドキュメントのページ](https://www.mathworks.com/help/matlab/calling-matlab-engine-from-cpp-programs.html)をご覧ください。 –

+0

@ Dev-iLありがとうございました。私はそれを確認し、[リンク](https://www.mathworks.com/help/matlab/matlab_external/call-matlab-functions-from-c-1.html)ページに続いています。しかし、メンバー関数を呼び出す機能はありません。さらに、私は 'mex'を使ってラッパーと新しいQを作成しました:' mex'と 'matlab :: engine'の違い(長所/短所)は何ですか? –

+0

残念ながら、「[他の言語用のMATLAB API](https://www.mathworks.com/help/matlab/programming-interfaces-for-external-languages.html)には全く慣れていないので、私はあなたを助けることはできません。 ) "... –

答えて

-1

Fooオブジェクトをどこかでインスタンス化する必要があるので、この例で最も簡単なのはfooメソッドを静的にすることです。

Foo.staticfoo(args)を呼び出すMatlabラッパー関数を作成し、mexCallMATLABを使用してMatlabラッパー関数を呼び出すことができます。 MATLABで

+0

私はインスタンス化が重要でなければならない理由を理解できませんが、すべてのメソッドを静的に変更することはできません。クラスはすでに作成され、インスタンス化されています。また、それはそのフロッファにいくつかのメソッドを持っています。だから私は 'mexCallMATLAB(nlhs、plhs、nrhs、prhs、" @ Foo/foo ")'や 'mexCallMATLAB(nlhs、plhs、nrhs、prhs、" @Foo/blabla ")'のようなものが必要です。 –

+0

静的メソッドとその必要性については、こちらを参照してください。https://uk.mathworks.com/help/matlab/matlab_oop/static-methods.html 静的メソッドを使用したくない場合は、クラスのメソッドを呼び出すためのクラスの特定のインスタンス mexCallMATLABを使用してC++から呼び出すMatlabラッパーのクラスの特定のインスタンスにアクセスするメカニズムを記述する必要があります。 –

0

あなただけの他の関数のようなクラスメソッドを呼び出します。

obj.method 

は、あなたが簡単にmexCallMATLABを使用してMEXファイルの中から類似したコールを作成することができます

method(obj) 

と同じです。 prhsの配列のいずれかがタイプFooである場合、MATLABはそのクラスのメソッド内で最初に関数を探します。

関連する問題