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

Этот пример создает MATLAB® интерфейс к библиотеке C++ с именем school. Библиотека определяется в заголовочном файле school.hpp и не имеет общего файла библиотеки. Библиотека, полностью заданная ее заголовочным файлом, называется header-only библиотекой. Если библиотека содержит файл общей библиотеки, см. раздел Публикация интерфейса в библиотеке общего 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).

Задайте отсутствующую информацию для функциональных getName C++

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

Конструкции с отсутствующей информацией комментируются. Прокрутите файл, чтобы найти раздел под названием «Функция 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')

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

The 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.

См. также

| | |

Похожие темы