2017-10-09 53 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将在该类的方法中首先查找函数。

相关问题