2009-10-21 75 views
13

我有一些代码需要在C++中编码,因为过分依赖模板。我想从MATLAB调用这段代码:基本上,我需要将一些参数传递给C++代码,并让C++代码返回一个矩阵给MATLAB。我听说这是可能的,我还在研究一个叫MEX的文件。但是我不确定这些MEX文件中支持什么。是否支持所有C++(例如STLBoost)?它有多困难?从MATLAB调用C++代码?

编辑:我不需要任何共享库,只是头像只是像shared_ptr的东西。

+0

[培训视频(波斯语)(https://drive.google.com/drive/folders/0B56iSBYoI8YbN2ExMzA5NTMtN2Q1NS00MGMyLTk3ODctYjNiMzM1ZjgwMzg2) – Ghominejad 2017-12-23 09:59:56

回答

8

查看MEX-files Guide,特别是C++的第25-27章。 基本的STL/Boost数据结构应该可以工作,但是使用Boost线程可能会成为一个问题。
cout在C++中无法正常工作,因此必须使用mexPrintf

+0

我将提供一些经验谨慎。如果您使用Simulink和RTW,则在编译标志-DRT时设置。一些boost的数学库使用模板。 -DRT杀死这些类。如果遇到此问题,请尝试在make文件中将-DRT更改为-DRT = RT。 – KitsuneYMG 2009-10-23 15:49:54

3

当然可以编写使用STL和boost的C++ MEX文件。一般来说,你应该可以在C++ MEX文件中做任何你喜欢的事情。主要的实际限制是MATLAB已经附带了一大堆库,所以如果你使用的是需要共享库的boost块(有些仅包含头文件),你需要匹配你编译的版本与MATLAB运输。

例如,MATLAB R2009b中附带提升1.36(您可以通过在<matlabroot> /斌/ <拱>看库的名称告诉)。

1

C++文件实际上是由外部编译器编译的。使用mex -setup来选择哪一个(here是支持的编译器列表)。因此,你不应该有太多奇怪的事情发生,也不应该被你所能做的事情限制太多。

去年我做了一些MEX的东西,而且我的记忆有点生疏,但是您确实需要使用MEX函数来构建MATLAB数组。我发现MATLAB文档是足够的,整个体验不会太痛苦。

1

STL绝对支持。可能还有助推。重点是只要你的STL和BOOST部署在你的计算机上,你应该很乐意去。