0

我的问题是关于如何对 Matlab 和我的 c++ 代码进行编程,以便它们可以交互。更具体地说,我有一个处理数据、创建对象、导出该对象的统计信息并写入 mat 文件的 c++ 程序。然后我将它加载到matlab中做进一步的分析和可视化。但是,处理数据和创建对象所需的时间是巨大的,而导出统计数据的时间可以忽略不计。另一方面,有许多统计数据和它们的不同组合,很难预测我们将使用哪些组合。所以我希望我可以多次交互运行“统计”部分,而无需重复处理数据的工作。

我的问题是:我可以要求 Matlab: 1. 调用 c++ 代码;2. 处理数据并创建对象后,使该对象在内存中保持“活动”状态 3. 再次调用 c++ 代码以请求将统计信息加载到我的工作区中。4. 用不同的统计数据重复 3。谢谢

4

2 回答 2

3

另一个选项可能是在 MEX 函数中创建一个 C++ 类实例,并将指向它的指针返回给 MATLAB,将指针传递给任何后续调用。如果您使用这种方法,您还应该为其创建一个 MATLAB 句柄类包装器,以允许您在其析构函数中正确清理内存。是一篇建议发帖人这样做的帖子,是 Mathworks FileExchange 上的方法示例。

此方法对您的问题的适用性取决于问题的复杂性。如果问题与其他方法非常复杂(例如,您需要使用某个库中的 C++ 类并且实例必须在调用之间保持活动状态,或者如果全局变量无法解决问题,我个人只会走这条路您需要跟踪很多实例,这自然最好由一组 C++ 类来表示,您可以在其中正确分离您的关注点)。

于 2013-03-29T13:29:03.760 回答
1

实现此目的的一种方法是在 c++ mex 代码中将要再次访问的变量声明为全局变量。这些变量将保留在内存中,您可以再次访问它们(当您调用 mex 函数时),直到您清除该 mex 函数或关闭 Matlab 会话。我为此使用了全局变量,它对我来说效果很好。

另一种选择是使用持久变量。从文档

持久变量类似于全局变量,因为 MATLAB® 软件为两者创建了永久存储。它们与全局变量的不同之处在于,持久变量只有在其中声明它们的函数才知道。这可以防止持久变量被其他函数或 MATLAB 命令行更改。

于 2013-03-29T13:25:54.550 回答