2017-10-09 54 views
0

使用mexCallMATLAB(nlhs, plhs, nrhs, prhs, "foo")命令我們可以調用一個函數(這裏是「foo.m」),這個函數是在C++中用MATLAB編寫的。如何從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'來創建一個包裝器和新的問題:'mex'和'matlab :: engine'有什麼區別(優缺點)? –

+0

不幸的是,我不能幫你,因爲我完全不熟悉整個「[其他語言的MATLAB API](https://www.mathworks.com/help/matlab/programming-interfaces-for-external-languages.html )「... –

回答

-1

Foo對象需要在某處進行實例化,因此這個示例最簡單的方法是使foo方法爲靜態。

然後,您可以創建一個Matlab包裝函數,該函數調用Foo.staticfoo(args)並使用mexCallMATLAB調用Matlab包裝函數。

+0

我不明白爲什麼實例化必須重要,但我可以告訴我不能將所有方法都改爲靜態方法。該類已被創建並實例化。在它的floder中也有幾種方法。所以我需要像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 如果你不想使用靜態方法,你需要一個該類的特定實例調用該類的方法。 您需要編寫一個訪問Matlab包裝器中類的特定實例的機制,您可以使用mexCallMATLAB從C++調用該包裝器。 –

0

在MATLAB你調用一個類的方法,就像任何其他功能:

obj.method 

相同

method(obj) 

您可以輕鬆創建使用mexCallMATLAB您的MEX文件內的類似的呼籲。如果prhs中的任何數組的類型爲Foo,那麼MATLAB將在該類的方法中首先查找函數。

相關問題