Использование аргументов типа функции

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)

Вызов функций C++ с входом типа функции

Передайте функцию библиотеки C++

Можно использовать 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

См. также