exponenta event banner

Ограничения поддержки C/C + +

Можно создать интерфейс MATLAB ® для 64-разрядных общих библиотек на основе C++ 98 и часто встречающихся функций C++ 11. Однако если библиотека содержит следующие типы данных или языковые функции, то эти функции не включаются в интерфейс MATLAB с библиотекой. Эту функцию можно включить, создав файл заголовка оболочки. Дополнительные сведения см. в разделе Примеры обхода ограничений C++.

Типы данных не поддерживаются

  • Любой тип с размером более 64 бит, например long double

  • Массивы символьных типов (wchar_t, char16_t, char32_t)

  • Ссылки на указатель, например int*&

  • Указатели или массивы std::string

  • Указатели или ссылки на перечисления

  • Ссылочные элементы данных

  • void* члены данных

  • std смарт-указатели, отличные от std::shared_ptr

  • Статические элементы данных

  • ** указатели, за исключением:

    • Опоры MATLAB char**

    • Опоры MATLAB ** указатели на пользовательские классы, используемые в качестве типов параметров функции или метода.

  • Многоуровневые указатели, например type***

  • Указатели функций C и std::function в качестве возвращаемых типов функций или элементов данных. Также нельзя передавать функцию MATLAB в качестве входных данных указателям функций C или std::function параметр.

  • Шаблоны классов с неполными экземплярами или без них

  • union

  • Типы, определенные в std пространство имен, за исключением этих поддерживаемых типов:

    • std::string

    • std::wstring

    • std::u16string

    • std::u32string

    • std::vector

    • std::shared_ptr

    • std::function

Сообщения о неподдерживаемых типах

Если библиотека использует эти типы данных, то функциональные возможности не включаются в интерфейс MATLAB к библиотеке, и MATLAB отображает такие сообщения, как:

Did not add member 'methodName' to class 'ClassName' at HeaderFile.h:290.
  'long double' is not a supported type.

Для просмотра этих сообщений используйте 'Verbose' опции в clibgen.generateLibraryDefinition или clibgen.buildInterface функции.

Языковые возможности не поддерживаются

  • move конструктор

  • Перегруженные функции оператора

  • Безымянные пространства имен и классы

  • Константы макросов

  • Глобальные переменные

  • Вариадические функции

  • Шаблоны функций с неполными экземплярами или без них

  • Создание объектов классов в std пространство имен, включая пользовательские классы.

  • Семантика смарт-указателей. Только std::shared_ptr поддерживается. MATLAB не поддерживает перегрузки операторов, семантику перемещения и функции-члены в определении класса смарт-указателя, что может ограничить их эффективность. Вместо этого std::shared_ptr<T> ведет себя как тип T в MATLAB. Напечатать T может быть передан в качестве входных данных для std::shared_ptr<T>, и тип T получен как выходной для std::shared_ptr<T>.

  • Псевдонимы пространства имен. Вместо этого используйте исходное имя пространства имен.

При построении библиотеки, содержащей эти элементы или использование, MATLAB отображает:

Warning: Some C++ language constructs in the header file are not supported and not imported.

Примечание

Сохранение объектов C++ в MAT-файле не поддерживается.

Наследование класса C++ в MATLAB

MATLAB не поддерживает создание классов MATLAB, наследующих класс интерфейса C++.

Неподдерживаемые методы классов

MATLAB не поддерживает реализующих операторов, определяя эти связанные функции.

Операция

Метод для определения

a < blt(a,b)
a > bgt(a,b)
a <= ble(a,b)
a >= bge(a,b)
a ~= bne(a,b)
a == beq(a,b)
a(s1,s2,...,sn)subsref(a,s)
a(s1,...,sn) = bsubsassign(a,s,b)
b(a)subsindex(a)

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