gpt4 book ai didi

c++ - 从 MATLAB 调用 MEX 中 C++ 类的方法

转载 作者:太空狗 更新时间:2023-10-29 19:44:05 26 4
gpt4 key购买 nike

我有一个 DLP 套件,我需要使用 C++ API 通过 MATLAB 对其进行控制。

例如,我在名为 dlp_controller.cpp/.c 的 mex 文件中为 {load_data, load_settings,display_data} 使用 C/C++ 的函数/方法。

我知道我可以使用 MATLAB 调用 dlp_controller();

有没有办法直接从 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[]{ ... }

我能否以某种方式从 MATLAB 调用 dlp_controller.load_data 之类的方法?注意:解决方法是将变量发送到 dlp_controller 并使用该变量和传递的数据在内部调用该函数。

最佳答案

据我所知,没有直接的方法可以做到这一点,因为 mexFunction界面相当平坦。但是,我可以想到一些不同的解决方法,应该可以让您接近。根据您的需要选择最佳的。

  1. 最简单的方法是创建 dlp 的全局实例你的 mex 函数中的类。使 mex 函数的第一个参数调用一个字符串,指示要调用全局对象的哪个成员函数。明显的缺点是您已将 mex 函数变成了单例。

  2. 如果您需要多个dlp例如,您可以在 mex 函数中创建一些全局容器,std::map<std::string, dlp>例如,然后引用每个 dlp在 MATLAB 中按某个名称实例。例如,要创建一个新实例,您可以使用 map 中尚不存在的名称调用 mex 函数。 .然后,您可以使用此名称、指示要调用哪个成员函数的字符串以及要传递给成员函数的任何参数来调用 mex 函数。还要设置一些约定,您可以通过这些约定删除 dlp。来自 map 的实例.

  3. 类似于第二种解决方案,而不是命名 dlp您可以为每个实例返回句柄。例如,创建一个全局 std::set<dlp *>当你有 mex 函数时,创建一个新的 dlp例如,将其添加到 set并将指向已分配对象的指针的拷贝返回给 MATLAB(将其粘贴在 mxUINT64_CLASS 类型的标量变量中)。对该对象调用成员函数的后续调用会将此handle 变量从 MATLAB 传递给 mex 函数,您将在 mex 文件中适本地转换它,在 set 中找到它。并调用成员函数。

这些方法都不是特别漂亮,但这是我所知道的从 mex 文件中调用 C++ 类的成员函数的唯一方法。

关于c++ - 从 MATLAB 调用 MEX 中 C++ 类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15127773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com