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. Function
, где 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