exponenta event banner

matlab:: cpplib:: MATLABLibrary:: feval

Выполнение функции MATLAB из развертываемого архива

Описание

Выполните функцию с 1 выходным аргументом MATLAB ® Data Array; 1 входной аргумент массива данных MATLAB

имя функции как u16string

matlab::data::Array feval(const std::u16string &function, const matlab::data::Array &arg, const std::shared_ptr<StreamBuffer> &output = std::shared_ptr<StreamBuffer>(), const std::shared_ptr<StreamBuffer> &error = std::shared_ptr<StreamBuffer>())

имя функции в виде строки

matlab::data::Array feval(const std::string &function, const matlab::data::Array &arg, const std::shared_ptr<StreamBuffer> &output = std::shared_ptr<StreamBuffer>(), const std::shared_ptr<StreamBuffer> &error = std::shared_ptr<StreamBuffer>())

Выполните функцию с 1 выходным аргументом MATLAB Data Array; 0, 2 или более входных аргументов массива данных MATLAB

имя функции как u16string

matlab::data::Array feval(const std::u16string &function, const std::vector<matlab::data::Array> &args, const std::shared_ptr<StreamBuffer> &output = std::shared_ptr<StreamBuffer>(), const std::shared_ptr<StreamBuffer> &error = std::shared_ptr<StreamBuffer>())

имя функции в виде строки

matlab::data::Array feval(const std::string &function, const std::vector<matlab::data::Array> &args, const std::shared_ptr<StreamBuffer> &output = std::shared_ptr<StreamBuffer>(), const std::shared_ptr<StreamBuffer> &error = std::shared_ptr<StreamBuffer>())

Выполните функцию с 0, 2 или более выходными аргументами MATLAB Data Array; любое количество входных аргументов массива данных MATLAB

имя функции как u16string

std::vector<matlab::data::Array> feval(const std::u16string &function, const size_t nlhs, const std::vector<matlab::data::Array> &args, const std::shared_ptr<StreamBuffer> &output = std::shared_ptr<StreamBuffer>(), const std::shared_ptr<StreamBuffer> &error = std::shared_ptr<StreamBuffer>())

имя функции в виде строки

std::vector<matlab::data::Array> feval(const std::string &function, const size_t nlhs, const std::vector<matlab::data::Array> &args, const std::shared_ptr<StreamBuffer> &output = std::shared_ptr<StreamBuffer>(), const std::shared_ptr<StreamBuffer> &error = std::shared_ptr<StreamBuffer>())

Выполнение функции с собственными аргументами ввода и вывода

имя функции как u16string

template<class ReturnType, typename...RhsArgs> ReturnType feval(const std::u16string &function, RhsArgs&&... rhsArgs)

имя функции в виде строки

template<class ReturnType, typename...RhsArgs> ReturnType feval(const std::string &function,RhsArgs&&... rhsArgs)

Выполнение функции с собственными аргументами ввода и вывода с перенаправлением вывода

имя функции как u16string

template<class ReturnType, typename...RhsArgs> ReturnType feval(const std::u16string &function, const std::shared_ptr<StreamBuffer> &output, const std::shared_ptr<StreamBuffer> &error, RhsArgs&&... rhsArgs)

имя функции в виде строки

template<class ReturnType, typename...RhsArgs> ReturnType feval(const std::string &function, const std::shared_ptr<StreamBuffer> &output, const std::shared_ptr<StreamBuffer> &error, RhsArgs&&... rhsArgs)

Вызовите пакетную функцию MATLAB в общей библиотеке C++:

  • Без перенаправления стандартного вывода или стандартной ошибки

  • С перенаправлением стандартного вывода

  • С перенаправлением стандартного вывода и стандартной ошибкой

LhsItemОдно из следующих:
  • Собственный скаляр

  • std::vector собственного типа

  • matlab::data::Array

  • std::tuple любой комбинации любой из упомянутых выше возможностей.

RhsArgs

Последовательность нулевых или нескольких аргументов, которые являются одним из следующих:

  • Собственный скаляр

  • std::vector собственного типа

  • matlab::data::Array

StreamBuffer

std::basic_streambuf<char16_t>

MATLABLibrary::feval вызывает упакованную функцию MATLAB в общей библиотеке C++ и передает имя функции, за которой следуют аргументы. Если указанную функцию не удается найти в библиотеке, создается исключение. По умолчанию функция возвращает либо один, либо matlab::data::Array объект (если ожидается один выходной аргумент) или вектор matlab::data::Array (если ожидаются нуль или несколько выходных аргументов). В первом случае вектор пуст. Задав аргумент шаблона, можно указать альтернативный возвращаемый тип, который может быть примитивным типом, или вектором примитивных типов, или кортежем из нескольких экземпляров любого из них.

Поддерживаемые собственные типы:

  • bool

  • int8_t

  • int16_t

  • int32_t

  • int64_t

  • uint8_t

  • uint16_t

  • uint32_t

  • uint64_t

  • float

  • double

  • std:string

  • std::u16string

  • std::complex<T> где T является одним из числовых типов.

  • Собственные данные C++, передаваемые в качестве входных данных, преобразуются в соответствующие типы MATLAB.

  • std::vector преобразуется в массив столбцов в MATLAB.

  • Результат функции MATLAB преобразуется в ожидаемый тип данных C++, если нет потери диапазона.

  • В противном случае создается исключение.

Параметры

const std::u16string &function

const std::string &function

Имя скомпилированной функции MATLAB, подлежащей оценке, указано как u16string или string.
const size_t nlhsКоличество возвращаемых значений.
const std::vector<matlab::data::Array>& argsАргументы, используемые функцией MATLAB, если указано несколько аргументов.
const matlab::data::Array>& argАргумент, используемый функцией MATLAB с одним входом.
const RhsArgs& rhsArgs

Пакет параметров шаблона, состоящий из последовательности нулевых или более аргументов, каждый из которых является одним из следующих:

  • голый собственный тип (см. список поддерживаемых собственных типов)

  • a std::vector голого собственного типа

  • a matlab::data::Array

const std::shared_ptr<StreamBuffer>& outputСтроковый буфер, используемый для хранения стандартных выходных данных функции MATLAB.
const std::shared_ptr<StreamBuffer>& errorСтроковый буфер, используемый для хранения выходных данных ошибки из функции MATLAB.

Возвращаемое значение

Ноль или одно из следующих значений, или кортеж любой их комбинации:

Собственный скалярный тип
std::vector
matlab::data::Array

Исключения

matlab::cpplib::CanceledException

Функция MATLAB отменяется.

matlab::cpplib::InterruptedException

Функция MATLAB прерывается.

matlab::cpplib::MATLABNotAvailableError

Сеанс MATLAB недоступен.

matlab::cpplib::MATLABSyntaxError

Функция MATLAB возвратила синтаксическую ошибку.

matlab::cpplib::MATLABExecutionError

Функция возвращает ошибку среды выполнения MATLAB.

matlab::cpplib::TypeConversionError

Результат функции MATLAB не может быть преобразован в пользовательский тип.

Примеры

Выполнение написанной пользователем функции MATLAB mysqrt в общей библиотеке C++

// This example assumes that mysqrt is a packaged user-written function that
// calls MATLAB's sqrt, which returns the square root of each element in
// the array that is passed to it.

auto matlabPtr = initMATLABApplication(MATLABApplicationMode::IN_PROCESS, opts);
auto libPtr = initMATLABLibrary(*matlabPtr, u"mylib.ctf");

// Initialize a matlab::data::TypedArray with three elements.
matlab::data::TypedArray<double> doubles = factory.createArray<double>({1.0, 4.0, 9.0});

// Retrieve the result of the mysqrt call. Since the output
// argument is a matlab::data::Array, feval does not require any template
// arguments.
matlab::data::Array mda = libPtr->feval(u"mysqrt", doubles);

// Now we retrieve the first element of that matlab::data::Array.
double d1 = mda[0];
std::assert(d1 == 1.0, "unexpected value");

// Pass a native type (a double) directly to mysqrt. Specify that you want
// a double (rather than a matlab::data::Array) as the return type.
double d2 = libPtr->feval<double>(u"mysqrt", 4.0);
std::assert(d2 == 2.0, "unexpected value");
Представлен в R2018a