如果我目前的目标可行,我会有点坚持,如果是的话,如何做到这一点。我希望通过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*/);
}
}
以下是我的问题:
如何在调用不同的 Mex文件时保持此std :: vector的持久性?没有办法从Mex文件中返回非Matlab类型(我知道),并且Mathworks说Mex函数中的局部变量通常在函数返回时被垃圾收集,这是我不想要的。如何在不同的函数中调用与我感兴趣的存储对象相同的std :: vector?甚至调用相同的功能?
使用Matlab有更好的方法吗?基本上我正在尝试使用Matlab来驱动一些C ++代码,这些代码完成了繁重的工作,然后将它全部带回Matlab进行分析。麻烦的是已经编写了C ++代码,我需要尝试修改Matlab以适应这些类。
答案 0 :(得分:2)
不确定Mex函数之间是否可行,但您可以在调用同一个mex例程之间保持一些持久性。
请参阅以下文档:
另请参阅Mathworks网站上的以下答案: How can I make memory persistent between calls to a MEX-file in MATLAB
我自己没有这样做,所以不能提供更具体的帮助,但这可能会指向正确的方向。