Интерфейс MATLAB ® автоматически преобразует сигнатуры функций C++ в сигнатуры функций MATLAB. Однако некоторые конструкции языка C++ не имеют уникальных совпадений в языке MATLAB. Чтобы включить эту функцию в интерфейс, отредактируйте .mlx файл определения и замените <DIRECTION>, <SHAPE>, и <MLTYPE> параметры с отсутствующей информацией. Эти параметры используются в следующих случаях.
Чтобы указать, является ли аргумент указателя входным, выходным или изменяемым, используйте параметр DIRECTION.
Если аргумент указателя используется для данных массива, то для преобразования массива между C++ и MATLAB требуется информация об измерении. Используйте параметр SHAPE для указания этой информации.
C++ имеет множество типов, представляющих строковые аргументы. Возможно, потребуется указать значения MLTYPE и SHAPE, чтобы MATLAB мог корректно преобразовать тип C++ в MATLAB. string тип.
MATLAB предлагает кодовые предложения для значений этих параметров. Чтобы активировать предложения для определенного параметра, выполните следующие действия.
Раскомментируйте код, определяющий функцию.
Удалите имя параметра, включая <> персонажи.
Приостановите отображение предложений кода.
Если предложения не появляются, проверьте, что define файл находится в пути MATLAB.libName.mlx
DIRECTION ПараметрВ C++ аргументы указателя могут использоваться для передачи и возврата данных из функции. Используйте DIRECTION параметр, указывающий, является ли аргумент входным, доступным только для чтения, выходным или изменяемым входным аргументом.
DIRECTION параметр имеет одно из следующих значений:
"input"- Только входной аргумент
Если аргумент указателя используется для передачи данных функции, то он должен отображаться как входной аргумент в сигнатуре MATLAB.
DIRECTION необходимо ввести значение для параметров C-string.
"output"- Только выходной аргумент
Если аргумент указателя используется для извлечения данных из функции, то он должен отображаться как выходной аргумент в сигнатуре MATLAB.
"inputoutput"- Входной и выходной аргумент
Если аргумент указателя используется для передачи и возврата данных, он должен отображаться как входной аргумент и выходной аргумент.
Примечание
Аргументы по умолчанию с направлением, указанным как OUT не поддерживаются. Определите их с помощью DIRECTION как "input" или "inputoutput" в файле MLX.
Например, предположим, что функция C++ passData имеет следующую подпись. Аргумент data может быть входом в функцию, возвращаемым значением функции или входом, который функция изменяет и возвращает. В документации по функции указывается, как функция использует аргумент. data.
void passData(double *data);
Принятие data является скалярным двойным значением, в этой таблице показана сигнатура MATLAB на основе ее роли.
Роль C++ для data | Подпись MATLAB |
|---|---|
Входные данные только для |
% Set DIRECTION = "input"
passData(data)
|
Возвращать данные только из |
% Set DIRECTION = "output"
[data] = passData()
|
Входные и выходные данные для |
% Set DIRECTION = "inputoutput"
[data] = passData(data)
|
SHAPE ПараметрВ C++ аргументы указателя используются как для скалярных данных, так и для данных массива. Для использования указателя в качестве массива требуется информация об измерении для преобразования массива между C++ и MATLAB. SHAPE параметр определяет размеры указателя.
Примечание
Эти типы указателей могут использоваться только в качестве скаляров. Определить SHAPE как 1 в файле MLX.
Указатели, представляющие массивы объектов класса C++
Указатели на неконст-примитивные массивы, возвращаемые функцией
Следующие примеры конструкций, определенных в образце cppUseCases.hpp В файле заголовка показано, как задать форму аргумента. В этих таблицах описания функций в столбце C++ Signature и Role of Pointer основаны на предполагаемом знании аргументов. Сама подпись эту информацию не предоставляет.
Для просмотра cppUseCases.hpp файл заголовка и созданный файл определения см. в разделе Пример файла определения библиотеки C++.
| Подпись C++ и роль указателя | defineArgument Ценности |
|---|---|
Вход в эту функцию является скалярным указателем void readScalarPtr(int const * in) | Для аргумента defineArgument(readScalarPtrDefinition, "in", ... "int32", "input", 1); |
Вход в эту функцию является скалярным указателем на класс void readScalarPtr(ns::MyClass2 const * in) | Для аргумента defineArgument(readScalarPtrDefinition, "in", ... "clib.cppUseCases.ns.MyClass2", "input", 1); |
| Подпись C++ | defineArgument Ценности |
|---|---|
Вход в эту функцию является указателем на целочисленный массив длины void readMatrix1DPtr(int const * mat,
size_t m)
| Для аргумента defineArgument(readMatrix1DPtrDefinition, "mat", ... "int32", "input", "m"); |
Вход в эту функцию является указателем на массив фиксированной длины void readMatrix1DPtrFixedSize(int const * mat) | Для аргумента defineArgument(readMatrix1DPtrFixedSizeDefinition, ... "mat", "int32", "input", 5); |
Вход в эту функцию является указателем на двумерную целочисленную матрицу void readMatrix2DPtr(int const * mat,
size_t m, size_t n)
| Для аргумента defineArgument(readMatrix2DPtrDefinition, "mat", ... "int32", "input", ["m","n"]); |
Вход в эту функцию является указателем на двумерную матрицу void readMatrix2DPtrFixedSize(int const * mat) | Для аргумента defineArgument(readMatrix2DPtrFixedSizeDefinition, ... "mat", "int32", "input", 6); |
Вход в эту функцию является указателем на трехмерную матрицу void readMatrix3DPtr(int const * mat,
size_t m, size_t n, size_t p)
| Для аргумента defineArgument(readMatrix3DPtrDefinition, "mat", ... "int32", "input", ["m","n","p"]); |
| Подпись C++ | defineArgument Ценности |
|---|---|
Вход в эту функцию представляет собой одномерный массив void readMatrix1DArr(int const [] mat,
size_t len) | Для аргумента defineArgument(readMatrix1DArrDefinition, "mat", ... "int32", "input", "len"); |
| Подпись C++ | defineArgument Ценности |
|---|---|
Вход в эту функцию является указателем на массив длины int const * getRandomValues(size_t len) | Для возвращаемого значения defineOutput(getRandomValuesDefinition, "RetVal", ... "int32", "len"); |
Выходной аргумент этой функции является указателем на массив фиксированной длины. int const * getRandomValuesFixedSize() | Для возвращаемого значения defineOutput(getRandomValuesFixedSizeDefinition, ... "RetVal", "int32", 5); |
| Подпись C++ | defineArgument Ценности |
|---|---|
Вход в эту функцию является указателем на класс double addClassByPtr(ns::MyClass2 const * myc2) | Для defineArgument(addClassByPtrDefinition, "myc2", ... "clib.cppUseCases.ns.MyClass2", "input", 1); |
Вход в эту функцию является указателем на класс void updateClassByPtr(ns::MyClass2 * myc2,
double a, short b, long c) | Для аргумента defineArgument(updateClassByPtrDefinition, "myc2", ... "clib.cppUseCases.ns.MyClass2", "input", 1); |
Вход в эту функцию является указателем на класс void readClassByPtr(ns::MyClass2 * myc2) | Для аргумента defineArgument(readClassByPtrDefinition, "myc2", ... "clib.cppUseCases.ns.MyClass2", "input", 1); |
Вход в эту функцию является указателем на класс void fillClassByPtr(ns::MyClass2 * myc2,
double a, short b, long c) | Для аргумента defineArgument(fillClassByPtrDefinition, "myc2", ... "clib.cppUseCases.ns.MyClass2", "input", 1); |
| Подпись C++ | defineArgument Ценности |
|---|---|
Вход в эту функцию является указателем на целочисленный вектор длины void updateMatrix1DPtrByX(int * mat,
size_t len, int x)
| Для аргумента defineArgument(updateMatrix1DPtrByXDefinition, ... "mat", "int32", "inputoutput", "len"); |
Вход в эту функцию является ссылкой на целочисленный массив длины void updateMatrix1DArrByX(int [] mat,
size_t len, int x) | Для аргумента defineArgument(updateMatrix1DArrByXDefinition, ... "mat", "int32", "inputoutput", "len"); |
Вход в эту функцию является указателем на целочисленный вектор длины int addValuesByPtr(int * mat,
size_t len)
| Для аргумента defineArgument(addValuesByPtrDefinition, "mat", ... "int32", "input", "len"); |
Вход в эту функцию является ссылкой на целочисленный массив длины int addValuesByArr(int [] mat,
size_t len)
| Для аргумента defineArgument(addValuesByArrDefinition, ... "mat", "int32", "input", "len"); |
Эта функция создает целочисленный вектор длины void fillRandomValuesToPtr(int * mat,
size_t len)
| Для аргумента defineArgument(fillRandomValuesToPtrDefinition, ... "mat", "int32", "output", "len"); |
Эта функция создает целочисленный вектор длины void fillRandomValuesToArr(int [] mat,
size_t len)
| Для аргумента defineArgument(fillRandomValuesToArrDefinition, ... "mat", "int32", "output", "len"); |
| Подпись C++ | defineArgument Ценности |
|---|---|
Входными данными для этой функции является строка в стиле Си. char const * getStringCopy(char const * str) | Для аргумента defineArgument(getStringCopyDefinition, "str", ... "string", "input", "nullTerminated"); |
Возвращаемое значение для этой функции является строкой. char const * getStringCopy(char const * str) | Для возвращаемого значения defineOutput(getStringCopyDefinition, "RetVal", "string", ... "nullTerminated"); |
Вход в эту функцию представляет собой строку, заданную длиной void readCharArray(char const * chArray,
size_t len)
| Для аргумента defineArgument(readCharArrayDefinition, "chArray", ... "char", "input", "len"); |
Вход в эту функцию является массивом типа void readInt8Array(char const * int8Array,
size_t len)
| Для аргумента defineArgument(readInt8ArrayDefinition, "int8Array", ... "int8", "input", "len"); |
Возвращаемое значение для этой функции является скаляром символов. char const * getRandomCharScalar() | Для возвращаемого значения defineOutput(getRandomCharScalarDefinition, ... "RetVal", "char", 1); |
Тип возвращаемого значения для этой функции: char const * getRandomInt8Scalar() | Для возвращаемого значения defineOutput(getRandomInt8ScalarDefinition, ... "RetVal", "int8", 1); |
Эта функция обновляет входной аргумент void updateCharArray(char* chArray,
size_t len)
| Для аргумента defineArgument(updateCharArrayDefinition, ... "chArray", "int8", "inputoutput", "len"); |
Вход в эти функции представляет собой массив C-строки размера void readCStrArray(char** strs, int numStrs); void readCStrArray(char* strs[], int numStrs); | Для аргумента defineArgument(readCStrArrayDefinition, ... "strs", "string", "input", ["numStrs", "nullTerminated"]) |
Входные данные для этих функций являются массивом const C-строки размера void readConstCStrArray (const char** strs, int numStrs); void readConstCStrArray (const char* strs[], int numStrs); | Звонить defineArgument(readConstCStrArrayDefinition, ... "strs", "string", "input", ["numStrs", "nullTerminated"]) |
Вход в эту функцию представляет собой массив C-строки фиксированного размера. void readFixedCStrArray (char* strs[5]); | Для аргумента defineArgument(readFixedCStrArrayDefinition, ... "strs", "string", "input", [5, "nullTerminated"]) |
Вход в эту функцию представляет собой массив констант фиксированного размера C-строки. void readConstCFixedStrArray (const char* strs[5]); | Звонить defineArgument(readConstFixedCStrArrayDefinition, ... "strs", "string", "input", [5, "nullTerminated"]) |
| Подпись C++ | defineArgument Ценности |
|---|---|
Вход в эту функцию является указателем на typedef void useTypedefPtr(intDataPtr input1)
typedef int16_t intData; typedef intData * intDataPtr; | Для аргумента defineArgument(useTypedefPtrDefinition, "input1", ... "int16", "input", 1); |
MLTYPE ПараметрMATLAB автоматически преобразует типы C++ в типы MATLAB, как описано в разделе Отображение типов данных C++ в MATLAB. Если тип C++ для аргумента является строкой, используйте эти параметры для выбора значений MLTYPE и SHAPE аргументы.
| Тип C++ | MLTYPE | Опции для SHAPE |
|---|---|---|
char* |
| Скалярное значение |
char**char*[] |
| вектор |
const char* |
| Скалярное значение |
|
| |
const char**const char*[] |
| Скалярное значение |
|
|