2009-10-21 77 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部署在你的計算機上,你應該很樂意去。