MATLAB ® поддерживает сигнатуры C++ сstd::function и аргументы указателя функции C. Оба std::function и указатель функции C - типы функций в MATLAB. Указатели функций C и std::function не поддерживаются как типы возвращаемых функций или элементы данных.
Если тип в библиотеке объявлен в typedef , то его можно использовать как тип функции. Например, предположим, что этот код C++ создается в интерфейсе 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 , то его можно использовать как тип функции. Например, предположим, что этот код C++ создается в интерфейсе 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.Function, где NN равен 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.funcPtrTypeAccepted 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