通过 Mex 文件与 C++ 对象交互
Interacting with C++ objects through Mex files
如果我当前的目标可行,我有点犹豫不决,如果可行,如何实现。我希望通过 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 文件中 return 非 Matlab 类型(我知道),Mathworks 说 Mex 函数中的局部变量通常在函数 returns 时被垃圾收集,我不想要。如何在不同的函数中使用我感兴趣的存储对象调用相同的 std::vector?甚至调用相同的函数?
有没有更好的方法用 Matlab 做这个?本质上,我正在尝试使用 Matlab 来驱动一些 C++ 代码,这些代码完成了繁重的工作,然后将其全部带回 Matlab 进行分析。问题是 C++ 代码已经写好了,我需要尝试改变 Matlab 以适应那些 类.
不确定 Mex 函数之间是否可能,但您可以使某些东西在对同一 mex 例程的调用之间保持不变。
参见以下文档:
另请参阅 Mathworks 网站上的此答案:
How can I make memory persistent between calls to a MEX-file in MATLAB
我自己没有这样做,所以无法提供更具体的帮助,但这可能会为您指明正确的方向。
如果我当前的目标可行,我有点犹豫不决,如果可行,如何实现。我希望通过 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 文件中 return 非 Matlab 类型(我知道),Mathworks 说 Mex 函数中的局部变量通常在函数 returns 时被垃圾收集,我不想要。如何在不同的函数中使用我感兴趣的存储对象调用相同的 std::vector?甚至调用相同的函数?
有没有更好的方法用 Matlab 做这个?本质上,我正在尝试使用 Matlab 来驱动一些 C++ 代码,这些代码完成了繁重的工作,然后将其全部带回 Matlab 进行分析。问题是 C++ 代码已经写好了,我需要尝试改变 Matlab 以适应那些 类.
不确定 Mex 函数之间是否可能,但您可以使某些东西在对同一 mex 例程的调用之间保持不变。
参见以下文档:
另请参阅 Mathworks 网站上的此答案: How can I make memory persistent between calls to a MEX-file in MATLAB
我自己没有这样做,所以无法提供更具体的帮助,但这可能会为您指明正确的方向。