gpt4 book ai didi

c++ - 具有多个函数的类对象的 MATLAB MEX 接口(interface)

转载 作者:可可西里 更新时间:2023-11-01 18:27:00 26 4
gpt4 key购买 nike

我正在使用 MEX 接口(interface)在 MATLAB 中运行 C++ 代码。我想向 MATLAB 添加几个函数来处理 System 对象:

sysInit()
sysRefresh()
sysSetAttribute(name, value)
String = sysGetAttribute(value)
sysExit()

由于每个 MEX dll 都可以包含一个函数,我需要找到一种方法来存储指向全局 System 对象的指针,该对象将一直存在,直到被调用 sysExit 删除>.

如何在 MATLAB 中正确执行此操作?有什么方法可以在对 MEX 函数的调用中存储全局指针吗?

最佳答案

一种常见的方法是使用多个提供公共(public)接口(interface)的 m 文件函数,例如sysInit.m、sysRefresh.m 等

这些 m 文件中的每一个都使用某种句柄、标识要调用的函数的字符串(或数字)以及任何额外的参数来调用 mex 函数。例如,sysRefresh.m 可能如下所示:

function sysRefresh(handle)
return sysMex(handle, 'refresh')

在您的 sysMex mex 函数中,您可以将句柄设为原始堆指针(简单但不太安全),或者您可以在 C/C++ 中维护从句柄 ID 到实际对象指针的映射。此解决方案需要一些额外的工作,但它更安全。这样就不会有人不小心将任意数字作为句柄传递,它充当悬空指针。此外,您还可以做一些更有趣的事情,例如在卸载 mex 函数时使用 onCleanup 函数释放所有内存和资源(例如,这样您就不必在重新编译 mex 函数时重新启动 matlab)。

如果愿意,您可以更进一步,将句柄隐藏在 Matlab 类后面。如果您有兴趣,请在文档中阅读 Matlab 的 OO 功能。如果您使用的是最新版本,则可以利用它们更简洁的句柄对象。

关于c++ - 具有多个函数的类对象的 MATLAB MEX 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1182183/

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