exponenta event banner

Опубликовать интерфейс в библиотеке C++ только для заголовка

В этом примере создается интерфейс MATLAB ® с библиотекой C++ с именемschool. Библиотека определяется в файле заголовка school.hpp и не имеет файла общей библиотеки. Библиотека, полностью определенная своим файлом заголовка, называется библиотекой только заголовка. Если библиотека содержит файл общей библиотеки, см. раздел Публикация интерфейса в общую библиотеку C++ в Windows или Публикация интерфейса в общую библиотеку C++ в Linux.

Эта библиотека определяет классы, представляющие учащихся и преподавателей. После публикации этой библиотеки пользователи MATLAB могут вызывать функции в clib.school пакет для создания Student и Teacher и укажите имена и возраст.

Проверка выбранного компилятора C++

Убедитесь, что выбран компилятор C++. Обновленный список поддерживаемых компиляторов см. в разделе Поддерживаемые и совместимые компиляторы. В этом примере используется компилятор MinGW64.

mex -setup cpp

Копировать файл заголовка примера

Копировать school.hpp в папку с возможностью записи на вашем пути. В этом примере предполагается, что текущей папкой является H:\Documents\MATLAB\publisher.

copyfile(fullfile(matlabroot,'extern','examples','cpp_interface','school.hpp'),'.','f')

Создать файл определения

Используйте clibgen.generateLibraryDefinition функция для создания файла определения библиотеки defineschool.mlx.

clibgen.generateLibraryDefinition('school.hpp')
Using MinGW64 Compiler (C++) compiler.
Generated definition file defineschool.mlx and data file 'schoolData.xml' contain definitions for 
21 constructs supported by MATLAB.
1 construct(s) require(s) additional definition. To include these construct(s) in the interface, 
edit the definitions in defineschool.mlx.
Build using build(defineschool).

Определение отсутствующей информации для функции C++ getName

MATLAB сообщает, что одна конструкция требует дополнительной информации (определения). Это означает, что MATLAB не может автоматически определить подпись для одной из функций. Чтобы предоставить недостающую информацию, щелкните ссылку, чтобы открыть defineschool.mlx в интерактивном редакторе MATLAB.

Конструкции с отсутствующей информацией комментируются. Прокрутите файл, чтобы найти раздел «C++ функция getName с именем MATLAB clib.school.getName». Раскомментируйте заявления в getName кодовый раздел.

Входной аргумент p является скалярным значением. Заменить <SHAPE> в этом заявлении с номером 1:

defineArgument(getNameDefinition, "p", "clib.school.Person", "input", <SHAPE>);
defineArgument(getNameDefinition, "p", "clib.school.Person", "input", 1);

Сохраните файл определения.

Проверьте библиотеку.

defineschool;

Дополнительные сведения о включении конструкций в интерфейс см. в разделе Определение отсутствующей информации для сигнатур MATLAB.

Создание интерфейса и добавление к пути MATLAB

Позвоните в build для создания файла интерфейса schoolInterface.dll в H:\Documents\MATLAB\publisher\school папка.

build(defineschool)
Building interface file 'schoolInterface.dll'.
Interface file 'schoolInterface.dll' built in folder 
'H:\Documents\MATLAB\publisher\school'.
To use the library, add the interface file folder to the MATLAB path.

Щелкните значок interface file folder для добавления интерфейса к пути. Либо введите:

addpath('school')

Просмотр содержимого библиотеки

summary отображает сводку классов и функций C++, определенных в school интерфейс.

summary(defineschool)
MATLAB Interface to school Library

Class clib.school.Person

  Constructors:
    clib.school.Person()
    clib.school.Person(string,uint64)
    clib.school.Person(clib.school.Person)

  Methods:
    setName(string)
    setAge(uint64)
    string getName()
    uint64 getAge()

  No Properties defined

Class clib.school.Teacher

  Constructors:
    clib.school.Teacher()
    clib.school.Teacher(string,uint64)
    clib.school.Teacher(clib.school.Teacher)

  Methods:
    string getName()

  No Properties defined

Class clib.school.Student

  Constructors:
    clib.school.Student()
    clib.school.Student(string,uint64)
    clib.school.Student(clib.school.Student)

  Methods:
    string getName()

  No Properties defined

Functions
  string clib.school.getName(clib.school.Person)

Функции тестирования

Вызов функциональных возможностей в school интерфейс, используйте MATLAB clib пакет. Введите имя пакета clib.school, заканчивая периодом. Для просмотра трех классов и одной функции, определенных в библиотеке, нажмите клавишу TAB.

Примечание

После использования библиотечного класса или функции невозможно изменить определение библиотеки, если не перезапустить MATLAB и не перестроить библиотеку.

Создайте учителя.

t1 = clib.school.Teacher('Ms. Jones',24);

Использовать getName для отображения имени учителя.

getName(t1)
ans = "Ms. Jones"

Изменить текст справки

Вы можете предоставить текст справки для своих пользователей. Дополнительные сведения см. в разделе Публикация текста справки для интерфейса MATLAB в библиотеке C++.

Распределить интерфейс

Чтобы предоставить интерфейс другому пользователю MATLAB, попросите его добавить schoolInterface.dll файл в папку с именем school и добавьте папку в путь MATLAB. Имя пакета: clib.school.

См. также

| | |

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