【问题标题】:Convert Matlab Handle class to C++将 Matlab 句柄类转换为 C++
【发布时间】:2015-05-18 09:27:15
【问题描述】:

我在 Matlab 中有一个句柄类,我希望能够在 C++ 中使用它。 我已经了解到here 我不能只生成一个 C++ 类,而是必须用函数包装我的类。 另一个问题中的示例仅显示了在包装函数中使用一个成员函数。但是,我需要能够调用我的类的多个成员函数。

由于我无法将我的类实例传递给包装函数 as per the Matlab documentation,因此我看不到让多个函数对同一个对象进行操作的方法。

不能这样做吗?

感谢任何帮助。

【问题讨论】:

  • 您链接到的答案已经很老了,写于 2013 年 3 月。从那时起,MATLAB Coder 发生了很大变化。
  • 确实如此。但根据 Matlab 文档,似乎仍然存在相同的限制。

标签: c++ matlab


【解决方案1】:

您不能将类作为为其生成代码的主函数的输入和输出。但是您可以从主函数调用任意数量的子函数,这些子函数可以将对象作为输入。该对象通常从您的主函数创建并传递给您的子函数。然后,您使用 codegen“主函数名称”生成代码。生成的代码包含所有子函数。

您还应该在子函数中使用coder.inline('never'),以便它们在生成的代码中显示为单独的函数。

【讨论】:

    【解决方案2】:

    我没有看到让多个函数对同一个对象进行操作的方法。

    为什么不呢?您可以只使用pointer 作为输入参数。

    int main() {
      int myarr[5] = {1, 2, 3, 4, 5};
      double myval1, myval2;
      myval = myfun1(myarr, 100);  // myarr is unchanged
      myfun2(&myarr, 200);         // myarr now has new values
      return 0;
    }
    
    double myfun1(int *arr, int para1) {
    // @TODO1
    }
    
    void myfun2(int *arr, int para2) {
    // @TODO2: here you can change value of *arr which is returned back to the calling function
    }
    

    myarr 可以更改为您想要的任何类。

    【讨论】:

    • 我要做的是使用 Matlab Coder 将一个用 Matlab 编写的类翻译成 C++。该工具不能直接翻译 Matlab 类,但它可以翻译操作 Matlab 类的函数。因此,要将 Matlab 类导出到 C++,建议的过程是编写使用 Matlab 类的 Matlab 函数,然后在该函数上使用 Matlab Coder,这给了我一个 C/C++ 函数。根据 Matlab 文档,Coder 无法处理将 Matlab 类作为输入/输出参数的函数。似乎 Matlab 类必须只存在于 Matlab 函数中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多