Вы также можете использовать метод compareTo()
для сравнения двух строк. Если результат compareTo равен 0, то две строки равны, в противном случае сравниваемые строки не равны.
==
сравнивает ссылки и не сравнивает фактические строки. Если вы создали каждую строку, используя new String(somestring).intern()
, вы можете использовать оператор ==
для сравнения двух строк, в противном случае могут использоваться только методы equals () или compareTo.
Один из распространенных подходов - наличие нескольких функций 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 в документации, если вам интересно. Если вы используете последнюю версию, вы можете воспользоваться преимуществами их гораздо более чистых дескрипторов.
В качестве альтернативы вы можете вообще не использовать MEX. В Matlab (в Windows) вы можете загрузить любую общую dll с помощью loadlibrary
и вызвать любую из ее функций с помощью callib
. Однако это, вероятно, не переносимо между операционными системами.