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

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. 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  

Выберите Input Function to Function Type

Функция справки 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

Смотрите также