Use Function Type Arguments
MATLAB® supports C++ signatures with std::function
and C function
pointer arguments. Both std::function
and C function pointer are
function types in MATLAB. C function pointers and std::function
are not supported as
function return types or data members.
Function Types
If a type in the library is declared in a
typedef
statement, then you can use it as a function type. For example, suppose that you build this C++ code into an interfacelibname
.typedef void (*ACallback)(int pos, void *data); int createTrackbar(const string& tname, ACallback onChange=0, void* data=0);
You can specify
clib.libname.ACallback
as a function type. The MATLAB signature forcreateTrackbar
is:int32 clib.libname.createTrackbar(string tname, clib.libname.ACallback onChange, int32 data)
If a type in the library is declared in a
using
statement, then you can use it as a function type. For example, suppose that you build this C++ code into an interfacelibname
.using funcPtrType = std::function<void(int*,int)>; void task(int *arr, int len , funcPtrType fp){ fp(arr, len); }
You can specify
clib.libname.funcPtrType
as a function type. The MATLAB signature fortask
is:clib.libname.task(clib.array.libname.Int,clib.libname.funcPtrType)
clib.type.libname.Function
, whereN
N
is 1 for the first function type without atypedef
and incremented for additional function types inlibname
. For example,libname
contains these functions:void task1((void (*param)(int)); void task2((void (*param)(long));
The MATLAB signatures for the functions are:
clib.libname.task1(clib.type.libname.Function1) clib.libname.task2(clib.type.libname.Function2)
Call C++ Functions With Function Type Input
Pass C++ Library Function
You can use the double_inputoutput
function defined in this header
file to pass as input to function type argument in callFunc_inputoutput
to manipulate an array. You can do this by creating a MATLAB function handle to
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);
}
Call callFunc_inputoutput
with the
double_inputoutput
function.
fp = @clib.test2.double_inputoutput; arr = [1,2,3,4,5,6]; clib.test2.callFunc_inputoutput(arr,fp)
Help for Function
help clib.test2.double_inputoutput
clib.test2.double_inputoutput Representation of C++ function double_inputoutput. arr = clib.test2.double_inputoutput(arr) Input Arguments arr vector int32 Output Arguments arr vector int32
Choose Input Function to Function Type
The MATLAB help function on function type displays a list of functions in your library that are compatible with your function type.
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