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.libname.task(clib.array.libname.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