Задайте Недостающий SHAPE Параметр

На C++ аргументы указателя используются и для скалярных данных и для данных массива. Использовать указатель в качестве массива, MATLAB® информация о размерности потребностей, чтобы безопасно преобразовать массив между C++ и MATLAB. SHAPE параметр помогает вам задать размерности для указателя.

Примечание

Эти типы указателей могут только использоваться в качестве скаляров. Задайте SHAPE как 1 в файле MLX.

  • Указатели, представляющие массивы объектов класса C++

  • Указатели на неconst примитивные массивы, возвращенные в функцию

Следующие примеры построений заданы в демонстрационном cppUseCases.hpp заголовочный файл показывает вам, как задать форму аргумента. В этих таблицах описания для функций в столбце C++ Signature and Role of Pointer основаны на принятом знании аргументов. Сама подпись не предоставляет эту информацию.

Просмотреть cppUseCases.hpp заголовочный файл и его сгенерированный файл определения, смотрите Выборку Файл Определения Библиотеки C++.

Задайте аргумент указателя к фиксированному скаляру

Подпись C++ и роль указателяdefineArgument Значения

Вход к этой функции является скалярным указателем in.

void readScalarPtr(int const * in)

Для аргумента in, установите SHAPE к 1.

defineArgument(readScalarPtrDefinition, "in", ...
    "int32", "input", 1);

Вход к этой функции является скалярным указателем, чтобы классифицировать ns::MyClass2.

void readScalarPtr(ns::MyClass2 const * in)

Для аргумента in, установите SHAPE к 1.

defineArgument(readScalarPtrDefinition, "in", ...
    "clib.cppUseCases.ns.MyClass2", "input", 1);

Задайте аргумент указателя

Подпись C++defineArgument Значения

Вход к этой функции является указателем на целочисленный массив длины m.

void readMatrix1DPtr(int const * mat, 
    size_t m)

Для аргумента mat, установите SHAPE к аргументу m.

defineArgument(readMatrix1DPtrDefinition, "mat", ...
    "int32", "input", "m");

Вход к этой функции является указателем на массив фиксированной длины mat.

void readMatrix1DPtrFixedSize(int const * mat)

Для аргумента mat, установите SHAPE до фиксированного целого числа, такой как 5.

defineArgument(readMatrix1DPtrFixedSizeDefinition, ...
    "mat", "int32", "input", 5);

Вход к этой функции является указателем на двумерную целочисленную матрицу mat из размера m- n.

void readMatrix2DPtr(int const * mat, 
    size_t m, size_t n)

Для аргумента mat, установите SHAPE к ["m","n"].

defineArgument(readMatrix2DPtrDefinition, "mat", ...
    "int32", "input", ["m","n"]);

Вход к этой функции является указателем на двумерный матричный mat из фиксированных размерностей.

void readMatrix2DPtrFixedSize(int const * mat)

Для аргумента mat, установите SHAPE до фиксированного целого числа, такой как 6.

defineArgument(readMatrix2DPtrFixedSizeDefinition, ...
    "mat", "int32", "input", 6);

Вход к этой функции является указателем на 3D матричный mat из размера m- n- p.

void readMatrix3DPtr(int const * mat, 
    size_t m, size_t n, size_t p)

Для аргумента mat, установите SHAPE к ["m","n","p"].

defineArgument(readMatrix3DPtrDefinition, "mat", ...
    "int32", "input", ["m","n","p"]);

Задайте аргумент Array

Подпись C++defineArgument Значения

Вход к этой функции является одномерным массивом mat из длины len.

void readMatrix1DArr(int const [] mat, 
    size_t len)

Для аргумента mat, установите SHAPE к длине len.

defineArgument(readMatrix1DArrDefinition, "mat", ...
    "int32", "input", "len");

Выходной Define аргумент указателя

Подпись C++defineArgument Значения

Вход к этой функции является указателем на массив длины len. Функция возвращает аргумент указателя, как выведено.

int const * getRandomValues(size_t len)

Для возвращаемого значения RetVal, установите SHAPE к аргументу len.

defineOutput(getRandomValuesDefinition, "RetVal", ...
    "int32", "len");

Выходным аргументом этой функции является указатель на массив фиксированной длины.

int const * getRandomValuesFixedSize()

Для возвращаемого значения RetVal, установите SHAPE до целого числа, такой как 5.

defineOutput(getRandomValuesFixedSizeDefinition, ...
    "RetVal", "int32", 5);

Задайте скалярный аргумент объекта

Подпись C++defineArgument Значения

Вход к этой функции является указателем, чтобы классифицировать ns::MyClass2.

double addClassByPtr(ns::MyClass2 const * myc2)

Для myc2 аргумент, набор SHAPE к 1.

defineArgument(addClassByPtrDefinition, "myc2", ...
    "clib.cppUseCases.ns.MyClass2", "input", 1);

Вход к этой функции является указателем, чтобы классифицировать ns::MyClass2.

void updateClassByPtr(ns::MyClass2 * myc2,
    double a, short b, long c)

Для аргумента myc2, установите SHAPE к 1.

defineArgument(updateClassByPtrDefinition, "myc2", ...
    "clib.cppUseCases.ns.MyClass2", "input", 1);

Вход к этой функции является указателем, чтобы классифицировать ns::MyClass2.

void readClassByPtr(ns::MyClass2 * myc2)

Для аргумента myc2, установите SHAPE к 1.

defineArgument(readClassByPtrDefinition, "myc2", ...
    "clib.cppUseCases.ns.MyClass2", "input", 1);

Вход к этой функции является указателем, чтобы классифицировать ns::MyClass2.

void fillClassByPtr(ns::MyClass2 * myc2,
    double a, short b, long c)

Для аргумента myc2, установите SHAPE к 1.

defineArgument(fillClassByPtrDefinition, "myc2", ...
    "clib.cppUseCases.ns.MyClass2", "input", 1);

Задайте матричный аргумент

Подпись C++defineArgument Значения

Вход к этой функции является указателем на целочисленный вектор из длины len. Аргумент x изменяет входной параметр.

void updateMatrix1DPtrByX(int * mat, 
    size_t len, int x)

Для аргумента mat, установите DIRECTION к "inputoutput" и SHAPE к "len".

defineArgument(updateMatrix1DPtrByXDefinition, ...
    "mat", "int32", "inputoutput", "len");

Вход к этой функции является ссылкой на целочисленный массив длины len. Аргумент x изменяет входной параметр mat.

void updateMatrix1DArrByX(int [] mat,  
    size_t len, int x)

Для аргумента mat, установите DIRECTION к "inputoutput" и SHAPE к "len".

defineArgument(updateMatrix1DArrByXDefinition, ...
    "mat", "int32", "inputoutput", "len");

Вход к этой функции является указателем на целочисленный вектор из длины len. Функция не изменяет входной параметр.

int addValuesByPtr(int * mat,
    size_t len)

Для аргумента mat, установите DIRECTION к "input" и SHAPE к "len".

defineArgument(addValuesByPtrDefinition, "mat", ...
    "int32", "input", "len");

Вход к этой функции является ссылкой на целочисленный массив длины len. Функция не изменяет входной параметр.

int addValuesByArr(int [] mat, 
    size_t len)

Для аргумента mat, установите DIRECTION к "input" и SHAPE к "len".

defineArgument(addValuesByArrDefinition, ...
    "mat", "int32", "input", "len");

Эта функция создает целочисленный вектор из длины len и возвращает ссылку на вектор.

void fillRandomValuesToPtr(int * mat, 
    size_t len)

Для аргумента mat, установите DIRECTION к "output" и SHAPE к "len".

defineArgument(fillRandomValuesToPtrDefinition, ...
    "mat", "int32", "output", "len");

Эта функция создает целочисленный вектор из длины len и возвращает ссылку на вектор.

void fillRandomValuesToArr(int [] mat, 
    size_t len)

Для аргумента mat, установите DIRECTION к "output" и SHAPE к "len".

defineArgument(fillRandomValuesToArrDefinition, ...
    "mat", "int32", "output", "len");

Задайте аргумент строки

Подпись C++defineArgument Значения

Вход к этой функции является строкой C-стиля.

char const * getStringCopy(char const * str)

Для аргумента str, установите MLTYPE к "string" и SHAPE к "nullTerminated".

defineArgument(getStringCopyDefinition, "str", ...
    "string", "input", "nullTerminated");

Возвращаемое значение для этой функции является строкой.

char const * getStringCopy(char const * str)

Для возвращаемого значения RetVal, установите MLTYPE к "string" и SHAPE к "nullTerminated".

defineOutput(getStringCopyDefinition, "RetVal", "string", ...
    "nullTerminated");

Возвращаемое значение для этой функции является строкой длины buf.

void getMessage(char * pmsg, int buf)

MATLAB задает аргумент pmsg как входная переменная типа clib.array.libname.Char.

%defineArgument(getMessageDefinition, "pmsg", ...
    "clib.array.libname.Char", "input", <SHAPE>); 

Задавать pmsg как выходная переменная строки типа:

  • Замените "input" с "output".

  • Замените тип на "string" и набор <SHAPE> к "nullTerminated".

  • Добавьте "NumElementsInBuffer" набор аргумента значения имени к переменной buf.

defineArgument(getMessageDefinition, "pmsg", ...
    "string, "output", "nullTerminated", ...
    "NumElementsInBuffer", "buf"); 

Вход к этой функции является строкой, заданной длиной len.

void readCharArray(char const * chArray,
    size_t len)

Для аргумента chArray, установите MLTYPE к "char" и SHAPE к "len".

defineArgument(readCharArrayDefinition, "chArray", ...
    "char", "input", "len");

Вход к этой функции является массивом типа int8 и длина len.

void readInt8Array(char const * int8Array,
    size_t len)

Для аргумента int8Array, установите MLTYPE к "int8" и SHAPE к "len".

defineArgument(readInt8ArrayDefinition, "int8Array", ...
    "int8", "input", "len");

Возвращаемое значение для этой функции является скаляром символов.

char const * getRandomCharScalar()

Для возвращаемого значения RetVal, установите MLTYPE к "char" и SHAPE к 1.

defineOutput(getRandomCharScalarDefinition, ... 
   "RetVal", "char", 1);

Типом возвращаемого значения для этой функции является int8.

char const * getRandomInt8Scalar()

Для возвращаемого значения RetVal, установите MLTYPE к "int8" и SHAPE к 1.

defineOutput(getRandomInt8ScalarDefinition, ...
    "RetVal", "int8", 1);

Эта функция обновляет входной параметр chArray. Длина chArray len.

void updateCharArray(char* chArray,
    size_t len)

Для аргумента chArray, установите DIRECTION к "inputoutput" и SHAPE к "len".

defineArgument(updateCharArrayDefinition, ...
    "chArray", "int8", "inputoutput", "len");

Вход к этим функциям является массивом струны до размера numStrs.

void readCStrArray(char** strs, int numStrs);
void readCStrArray(char* strs[], int numStrs);

Для аргумента strs, установите SHAPE к массиву ["numStrs", "nullTerminated"].

defineArgument(readCStrArrayDefinition, ...
    "strs", "string", "input", ["numStrs", "nullTerminated"])

Вход к этим функциям является массивом const струны до размера numStrs.

void readConstCStrArray (const char** strs, int numStrs);
void readConstCStrArray (const char* strs[], int numStrs);

Вызвать clibgen.generateLibraryDefinition с TreatConstCharPointerAsCString установите на истину, чтобы автоматически задать SHAPE для аргумента strs как ["numStrs", "nullTerminated"].

defineArgument(readConstCStrArrayDefinition, ...
    "strs", "string", "input", ["numStrs", "nullTerminated"])

Вход к этой функции является массивом фиксированного размера струны до.

void readFixedCStrArray (char* strs[5]);

Для аргумента strs, установите SHAPE к массиву [5, "nullTerminated"].

defineArgument(readFixedCStrArrayDefinition, ...
    "strs", "string", "input", [5, "nullTerminated"])

Вход к этой функции является массивом const фиксированного размера струны до.

void readConstCFixedStrArray (const char* strs[5]);

Вызвать clibgen.generateLibraryDefinition с TreatConstCharPointerAsCString установите на истину, чтобы задать SHAPE для аргумента strs как [5, "nullTerminated"].

defineArgument(readConstFixedCStrArrayDefinition, ...
    "strs", "string", "input", [5, "nullTerminated"])

Задайте введенный аргумент указателя

Подпись C++defineArgument Значения

Вход к этой функции является указателем на определение типа intDataPtr.

void useTypedefPtr(intDataPtr input1)

intDataPtr задан как:

typedef int16_t intData;
typedef intData * intDataPtr;

Для аргумента input1, установите DIRECTION к input и SHAPE к 1.

defineArgument(useTypedefPtrDefinition, "input1", ...
    "int16", "input", 1);

Используйте свойство или метод как SHAPE

Можно использовать общедоступный нестатический элемент данных C++ (свойство) в качестве SHAPE для типа возврата нестатического метода или другого нестатического элемента данных (свойство) в том же классе. Свойство должно быть задано как целое число (тип C++ int). Точно так же можно использовать статический C++ элементы данных в качестве SHAPE параметр для типа возврата статического метода или другого статического элемента данных в том же классе.

Можно использовать общедоступный, нестатический метод C++ в качестве the SHAPE parameter для нестатического свойства или для типа возврата нестатического метода в том же классе. Метод должен быть полностью реализован без входных параметров, и тип возврата должен быть задан as a тип C++ int.

Можно использовать комбинацию параметров, свойств и методов как SHAPE параметр для метода возвращает тип. Если заданный SHAPE существует и как параметр и как метод или свойство, затем параметры более приоритетны. В этом случае SHAPE обработан в качестве параметра.

Подпись C++Значения SHAPE

Размер элемента данных rowData задан элементами данных rows и cols и результатом метода channels.

class A
{
public:
    int rows;
    int cols;
    int* rowData;
    int channels();
};

Для свойства rowData, установите SHAPE к массиву rows, cols, и channels.

addProperty(ADefinition, "rowdata", ["rows","cols","channels"]...
    "Description", "clib.array.libname.Int    Data member of C++ class A.");

Размер массива возвращен getData задан элементами данных rows и cols и результатом channels метод.

class B
{
public:
    int rows;
    int cols;
    int* rowData;
    int channels();
    const int* getData();
};

Для возвращаемого значения метода getData, установите SHAPE к массиву rows, cols, и channels.

defineOutput(getDataDefinition, "RetVal", "clib.array.libname.Int", ["rows","cols","channels"]);

Размер массива возвращен getData задан rows параметр и результат метода channels.

class C
{
public:
    int rows;
    int channels();
    const int* getData (int rows);
};

Для возвращаемого значения метода getData, установите SHAPE к массиву параметра rows и метод channels.

defineOutput(getDataDefinition, "RetVal", "clib.array.C.Int", ["rows","channels"]);