matlab::cpplib::MATLABLibrary::feval

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

Описание

Выполните функцию с 1 выходом MATLAB® Аргумент Массив; 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 Runtime.

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