Вызов кода C ++ из MATLAB? - PullRequest
       15

Вызов кода C ++ из MATLAB?

13 голосов
/ 21 октября 2009

У меня есть код, который мне нужно кодировать на C ++ из-за большой зависимости от шаблонов. Я хочу вызвать этот код из MATLAB: в основном, мне нужно передать некоторые параметры в код C ++, и чтобы код C ++ возвращал матрицу в MATLAB. Я слышал, что это возможно с чем-то, называемым MEX файлом, который я все еще изучаю. Однако я не уверен, что поддерживается в этих файлах MEX. Поддерживается ли весь C ++ (например, STL и Boost )? Насколько это сложно?

РЕДАКТИРОВАТЬ: мне не нужны какие-либо общие библиотеки, только такие вещи, как заголовки shared_ptr.

Ответы [ 4 ]

8 голосов
/ 21 октября 2009

Ознакомьтесь с Руководством по * MEX-файлам , особенно с разделом 25–27 для C ++. Базовые STL / Boost структуры данных должны работать, но многопоточность с Boost может быть проблемой.
cout не будет работать должным образом в C ++, вместо этого следует использовать mexPrintf.

3 голосов
/ 22 октября 2009

Конечно, можно писать файлы C ++ MEX, которые используют STL и boost. В общем, вы должны иметь возможность делать все, что угодно, внутри файла C ++ MEX. Основное практическое ограничение заключается в том, что MATLAB уже поставляется с кучей библиотек, поэтому, если вы используете один из компонентов надстройки, для которого требуется общая библиотека (некоторые только для заголовков), вам нужно будет соответствовать версии, с которой вы компилируете с этой доставкой с MATLAB.

Например, MATLAB R2009b поставляется с бустом 1.36 (вы можете узнать, посмотрев на названия библиотек в / bin / ).

1 голос
/ 03 февраля 2018

STL определенно поддерживается. Повысить наверное еще. Дело в том, что до тех пор, пока ваши STL и BOOST развернуты на вашем компьютере, у вас все получится.

1 голос
/ 22 октября 2009

Файлы C ++ на самом деле компилируются внешним компилятором. Используйте mex -setup, чтобы выбрать, какой из них ( здесь - список поддерживаемых компиляторов). Следовательно, не должно случаться слишком много странных вещей, и при этом вы не должны быть слишком ограничены тем, что вы можете сделать.

В прошлом году я делал кое-что о MEX, и моя память немного ржавая, но вам нужно создавать массивы MATLAB с использованием функций MEX. Я нашел документацию MATLAB адекватной, и весь опыт не слишком болезненный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...