【发布时间】:2017-10-25 18:04:03
【问题描述】:
我目前的目标是否可行,如果可行,该怎么做。我希望通过 Mex 文件与一些 C++ 类进行交互,但我需要我正在访问的对象的实例在来自不同 Mex 函数的调用中保持不变。例如,假设我在初始化 Mex 文件中执行以下操作:
void mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
size_t nCats = (size_t) *mxGetPr(prhs[0]);
std::vector<Cat> cats;
for(size_t i = 0; i <nCats; i++){
cats[i] = Cat(/* arguments to constructor*/);
}
}
所以我已经从我的外部 C++ 代码初始化了我的 Cat 对象。现在,稍后,我需要更新关于我的 Cat 对象的信息,所以在另一个 Mex 文件中我有
void mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
for(size_t i = 0; i < nCats; i++){
cats[i].feed(/*parameters to feed method*/);
}
}
这是我的问题:
如何使这个 std::vector 在对不同 Mex 文件的调用中保持不变?没有办法从 Mex 文件中返回非 Matlab 类型(我知道),Mathworks 说 Mex 函数中的局部变量通常在函数返回时被垃圾收集,这是我不想要的。如何跨不同函数调用具有我感兴趣的存储对象的相同 std::vector?甚至调用相同的函数?
Matlab 有没有更好的方法来做到这一点?本质上,我正在尝试使用 Matlab 来驱动一些 C++ 代码,这些代码完成了繁重的工作,然后将其全部带回 Matlab 进行分析。问题是 C++ 代码已经写好了,我需要尝试弯曲 Matlab 以适应这些类。
【问题讨论】: