Интерфейс MATLAB MEX для объекта класса с несколькими функциями

Вы также можете использовать метод compareTo() для сравнения двух строк. Если результат compareTo равен 0, то две строки равны, в противном случае сравниваемые строки не равны.

== сравнивает ссылки и не сравнивает фактические строки. Если вы создали каждую строку, используя new String(somestring).intern(), вы можете использовать оператор == для сравнения двух строк, в противном случае могут использоваться только методы equals () или compareTo.

7
задан Amro 18 October 2011 в 18:44
поделиться

2 ответа

Один из распространенных подходов - наличие нескольких функций m-файла, которые обеспечивают открытый интерфейс, например sysInit.m, sysRefresh.m и т. Д.

Каждый из этих m-файлов вызывает функцию mex функция с каким-либо дескриптором, строкой (или числом), идентифицирующей функцию для вызова, и любыми дополнительными аргументами. Например, sysRefresh.m может выглядеть так:

function sysRefresh(handle)
return sysMex(handle, 'refresh')

В вашей функции sysMex mex вы можете либо указать дескриптором необработанного указателя кучи (легко, но не очень безопасно), либо вы можете поддерживать отображение на C / C ++ из идентификатор дескриптора фактических указателей объектов. Это решение требует небольшой дополнительной работы, но оно намного безопаснее. Таким образом, кто-то не может случайно передать произвольное число в качестве дескриптора, который действует как висячий указатель. Также, вы можете делать более изящные вещи, например использовать функцию onCleanup для высвобождения всей памяти и ресурсов при выгрузке функции mex (например, чтобы вам не пришлось перезапускать Matlab при перекомпиляции функции mex).

Вы можете пойти немного дальше. если хотите, и спрячьте ручку за классом Matlab. Прочтите о возможностях объектно-ориентированного проектирования для Matlab в документации, если вам интересно. Если вы используете последнюю версию, вы можете воспользоваться преимуществами их гораздо более чистых дескрипторов.

8
ответ дан 6 December 2019 в 23:11
поделиться

В качестве альтернативы вы можете вообще не использовать MEX. В Matlab (в Windows) вы можете загрузить любую общую dll с помощью loadlibrary и вызвать любую из ее функций с помощью callib . Однако это, вероятно, не переносимо между операционными системами.

3
ответ дан 6 December 2019 в 23:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: