exponenta event banner

Определение интерфейса MATLAB для библиотеки C++

Полные определения

После создания файла определения библиотеки definelibName.mlx использование clibgen.generateLibraryDefinition, возможно, потребуется изменить содержимое для включения функциональных возможностей в интерфейс. Для изменения файла используйте интерактивный редактор. Дополнительные сведения см. в разделе Определение отсутствующей информации для сигнатур MATLAB.

Автоматическое определение аргументов

Можно настроить MATLAB для автоматического определения типа и формы определенных типов аргументов с помощью clibgen.generateLibraryDefinition и clibgen.buildInterface аргументы пары имя-значение. Возможны следующие варианты:

  • Чтобы лечить всех const символьные указатели в библиотеке как строки C с нулевым окончанием, установите аргумент TreatConstCharPointerAsCString в значение true.

  • Чтобы рассматривать все указатели объектов в библиотеке как скаляры, задайте для аргумента TreatObjectPointerAsScalar значение true.

Однако при проверке определения библиотеки могут возникать ошибки в отношении повторяющихся сигнатур MATLAB ®. Чтобы устранить эти ошибки, см. раздел Согласование конфликтов подписей MATLAB.

Согласование конфликтов подписей MATLAB

После создания и редактирования файла определения библиотеки могут существовать две или более функций или других конструкций с идентичными сигнатурами MATLAB. Чтобы проверить наличие этого конфликта, проверьте файл определения. Например, для файла определения definelibname, введите:

definelibname

При возникновении конфликта MATLAB отображает ошибку со ссылкой на код в файле определения. Чтобы разрешить конфликт, выберите один из следующих вариантов:

  • Пересмотреть defineArgument или defineOutput аргументы для создания уникальной подписи MATLAB. Конфликт возникает, когда имеется несколько перегруженных функций и задаются одни и те же параметры аргумента. См. раздел Определение отсутствующей информации для сигнатур MATLAB.

  • Удалите одну из функций, прокомментировав определение конструкции. Конфликт может возникнуть при использовании одного из clibgen.generateLibraryDefinition аргументы пары «имя-значение» для автоматического преобразования всех вариантов определенного типа. Также можно удалить перегруженную функцию.

После изменения файла определения повторно запустите файл для проверки изменений.

Настройка содержимого

Просмотрите схему переименования, используемую MATLAB для замены недопустимых имен. Дополнительные сведения см. в разделе Недопустимые имена C++ в MATLAB.

Просмотрите автоматически созданную справку. MATLAB автоматически копирует некоторые комментарии C++ в Description и DetailedDescription аргументы. Вы можете изменить или заменить это содержимое, которое является основой doc для конечных пользователей.

Настройка имен шаблонов функций

Просмотрите уникальные имена функций, созданные из шаблонов функций в файле определения библиотеки. Например, класс A в этом файле заголовка определяется шаблон функции show и предоставляет экземпляры для типов int, double, и const A.

class A{}; // User type
template<typename T> void show(T a) {}
template void show<int>(int);
template void show<double>(double);
template<> void show<const A &>(const A& a){}

При построении интерфейса A в этой библиотеке MATLAB создает перегруженные функции с подписями для этих экземпляров.

summary(defineA)
MATLAB Interface to libname Library

Class clib.libname.A

  Constructors:
    clib.libname.A(clib.libname.A)
    clib.libname.A()

  No Methods defined

  No Properties defined

Functions
clib.libname.show(int32)
clib.libname.show(double)
clib.libname.show(clib.libname.A)

Интерфейс C++ также генерирует уникальные имена функций на основе типов сигнатур. Для просмотра уникальных имен используйте свойство TemplateUniqueName.

d = defineA;
d.Functions(1:3).TemplateUniqueName
ans = "clib.libname.show_int_"
ans = "clib.libname.show_double_"
ans = "clib.libname.show_AConst__"

Эти имена можно настроить в файле определения библиотеки. Например, измените имя функции для объекта класса, clib.libname.show_AConst__. Перезапуск MATLAB и редактирование defineA.mlx. Найдите addFunction заявление для show_AConst__ и изменить "TemplateUniqueName" аргумент пары имя-значение. Заменить show_AConst__ с новым именем, например showObjectA. Обновить "Description" аргумент пары имя-значение путем замены clib.libname.show с новым именем clib.libname.showObjectA и изменение текста справки для чтения Representation of C++ function show for class A.

"Description", "clib.libname.showObjectA    Representation of C++ function show for class A.");
help clib.libname.showObjectA
 clib.libname.showObjectA    Representation of C++ function show for class A.

    Inputs
      a              read-only clib.libname.A  

    No outputs

Дополнительные сведения см. в разделе Использование шаблонов функций и элементов.

См. также

|

Связанные темы