exponenta event banner

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

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

См. также