MATLAB® поддерживает сигнатуры C++ с std::function
и аргументы указателя на функцию C. Оба std::function
указатель на функцию C function types в MATLAB. Указатели на функции C и std::function
не поддерживаются как типы возврата функций или представители данных.
Если тип в библиотеке объявлен в typedef
оператор, затем можно использовать его как тип функции. Например, предположим, что вы создаете этот код С++ в интерфейс libname
.
typedef void (*ACallback)(int pos, void *data); int createTrackbar(const string& tname, ACallback onChange=0, void* data=0);
Можно задать clib.libname.ACallback
как тип функции. Подпись MATLAB для createTrackbar
является:
int32 clib.libname.createTrackbar(string tname, clib.libname.ACallback onChange, int32 data)
Если тип в библиотеке объявлен в using
оператор, затем можно использовать его как тип функции. Например, предположим, что вы создаете этот код С++ в интерфейс libname
.
using funcPtrType = std::function<void(int*,int)>; void task(int *arr, int len , funcPtrType fp){ fp(arr, len); }
Можно задать clib.libname.funcPtrType
как тип функции. Подпись MATLAB для task
является:
clib.test.task(clib.array.test.Int,clib.libname.funcPtrType)
clib.type.libname. Функция
, где N
N
является 1 для первого типа функции без typedef
и с шагом для дополнительных типов функций в libname
. Для примера, libname
содержит следующие функции:
void task1((void (*param)(int)); void task2((void (*param)(long));
Сигнатуры MATLAB для функций:
clib.libname.task1(clib.type.libname.Function1) clib.libname.task2(clib.type.libname.Function2)
Можно использовать double_inputoutput
функция, определенная в этом заголовочном файле, чтобы передать как вход в аргумент типа функции в callFunc_inputoutput
для манипулирования массивом. Вы можете сделать это, создав указатель на функцию MATLAB, чтобы double_inputoutput
.
#include <functional> void double_inputoutput( int * arr, int len){ for(int i=0;i<len;++i){ arr[i] = arr[i]*2; } } using funcPtrType = std::function<void(int*,int)>; void callFunc_inputoutput(int *arr, int len , funcPtrType fp){ fp(arr, len); }
Функции callFunc_inputoutput
с double_inputoutput
функция.
fp = @clib.test2.double_inputoutput; arr = [1,2,3,4,5,6]; clib.test2.callFunc_inputoutput(arr,fp)
help clib.test2.double_inputoutput
clib.test2.double_inputoutput Representation of C++ function double_inputoutput. Inputs arr int32 Outputs arr int32
Функция справки MATLAB по типу функции отображает список функций в библиотеке, которые совместимы с типом функции.
help clib.test2.funcPtrType
Accepted input for clib.test2.funcPtrType is a handle to a C++ library function with matching signature. C++ library functions with matching inputs and outputs to the C++ function type: @clib.test2.double_inputoutput