mATLAB:::: MATLABLibrary:: feval

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

Описание

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

имя функции как 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 Data Array

имя функции как 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 Data Array

имя функции как 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

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

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

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

  • 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