gpt4 book ai didi

c++ - 通过 Mex 文件与 C++ 对象交互

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:38 25 4
gpt4 key购买 nike

如果我当前的目标可行,我有点犹豫不决,如果可行,如何实现。我希望通过 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*/);
}
}

这是我的问题:

  1. 我如何使这个 std::vector 在对不同 Mex 文件的调用中保持不变?没有办法从 Mex 文件返回非 Matlab 类型(我知道),Mathworks 说 Mex 函数内的局部变量通常在函数返回时被垃圾收集,我不希望这样。如何在不同的函数中使用我感兴趣的存储对象调用同一个 std::vector?甚至调用相同的函数?

  2. 使用 Matlab 有更好的方法吗?本质上,我正在尝试使用 Matlab 来驱动一些 C++ 代码,这些代码完成了繁重的工作,然后将其全部带回 Matlab 进行分析。问题是 C++ 代码已经写好了,我需要尝试改变 Matlab 以适应这些类。

最佳答案

不确定 Mex 函数之间是否可能,但您可以使某些东西在对同一 mex 例程的调用之间保持不变。

请参阅文档:

另请参阅 Mathworks 网站上的此答案: How can I make memory persistent between calls to a MEX-file in MATLAB

我自己没有这样做,所以无法提供更具体的帮助,但这可能会为您指明正确的方向。

关于c++ - 通过 Mex 文件与 C++ 对象交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46939226/

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