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

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

EDIT: мне не нужны какие-либо общие библиотеки, просто такие вещи только для заголовков, как shared_ptr.

Ответы

Ответ 1

Посмотрите Руководство по файлам MEX, особенно в разделе 25-27 для С++. Структуры данных STL/ Boost должны работать, но нарезка с помощью Boost может быть проблемой.
cout не будет работать должным образом в С++, вместо этого следует использовать mexPrintf.

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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