2017-10-09 19 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 감사합니다. 나는 그것을 확인한 후 [link] (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)을 호출하고 mexCallMATLAB을 사용하여 Matlab 랩퍼 함수를 ​​호출하는 Matlab 랩퍼 함수를 ​​작성할 수 있습니다.

당신은 다른 모든 기능과 같은 클래스 메소드를 호출 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 정적 메서드를 사용하지 않으려면 클래스의 메서드를 호출하는 클래스의 특정 인스턴스 mexCallMATLAB을 사용하여 C++에서 호출하는 Matlab 랩퍼에서 클래스의 특정 인스턴스에 액세스하는 메커니즘을 작성해야합니다. –

0

:

obj.method 

은 쉽게 mexCallMATLAB를 사용하여 MEX-파일 내에서 유사한 전화를 만들 수 있습니다

method(obj) 

과 동일 . prhs에있는 배열 중 하나가 Foo 유형 인 경우 MATLAB은 해당 클래스의 메서드에서 먼저 함수를 찾습니다.