matlab::cpplib::MATLABLibrary::feval

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

Описание

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

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