Sri*_*utt 3 c c++ methods matlab mex
我有一个DLP工具包,我需要通过MATLAB使用C++ API进行控制.
比如,我{load_data, load_settings,display_data}在一个名为dlp_controller.cpp/.c的mex文件中使用C/C++的函数/方法.
我知道我可以dlp_controller();用MATLAB 打电话.
有没有办法可以直接从MATLAB调用这个mex的方法?
说我的dlp_controller.cpp mex看起来像:
class dlp{ ... }
dlp::dlp{ ... }
dlp::load_data{ ... }
dlp::load_settings{ ... }
dlp::display_data{ ... }
void mexFunction(int nlhs, mxArray *[],int nrhs, const mxArray *prhs[]{ ... }
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式调用dlp_controller.load_dataMATLAB中的方法吗?注意:解决方法可以是dlp_controller使用该函数和传递的数据向内部发送变量并调用该函数.
AFAIK,没有直接的方法来做到这一点,因为mexFunction界面相当平坦.但是,我可以想到一些不同的解决方法,可以让你接近.根据您的需求选择最佳的一个.
最简单的方法是dlp在mex函数中创建类的全局实例.使mex函数的第一个参数调用一个字符串,该字符串指示调用全局对象的哪个成员函数.明显的缺点是你已经将你的mex功能变成了单身.
如果需要多个dlp实例,可以在mex函数中创建一个全局容器std::map<std::string, dlp>,然后dlp在MATLAB中通过某个名称引用每个实例.例如,要创建一个新实例,您可以使用名称中尚未存在的名称调用mex函数map.然后,您可以使用此名称调用mex函数,指示要调用的成员函数的字符串以及要传递给成员函数的任何参数.还设置了一些约定,您可以从中删除dlp实例map.
与第二个解决方案类似,dlp您可以将句柄返回到每个实例,而不是命名实例.例如,创建一个全球性的std::set<dlp *>,当你有MEX函数创建一个新的dlp实例,将其添加到set与指针的一个拷贝到所分配的对象返回到MATLAB(坚持在类型的标量mxUINT64_CLASS).后续调用来调用成员函数对象将在本通手柄变量从MATLAB的MEX功能,你会适当的MEX文件内施放的,内找到它set并调用成员函数.
这些方法都不是特别漂亮,但这些是我所知道的从mex文件中调用C++类的成员函数的唯一方法.
| 归档时间: |
|
| 查看次数: |
3253 次 |
| 最近记录: |