Выполните функцию 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 | Одно из следующего:
|
RhsArgs | Последовательность нуля или большего количества аргументов, которые являются одним из следующего:
|
StreamBuffer |
|
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++, если нет никакой потери области значений.
В противном случае исключение выдается.
| Имя скомпилированной функции MATLAB, которая будет оценена заданный любой как u16string или string . |
const size_t nlhs | Количество возвращаемых значений. |
const std::vector<matlab::data::Array>& args | Аргументы, используемые функцией MATLAB, когда больше чем один задан. |
const matlab::data::Array>& arg | Аргумент используется функцией MATLAB с одним входом. |
const RhsArgs& rhsArgs | Пакет параметра шаблона, состоящий из последовательности нуля или большего количества аргументов, каждый из которых является одним из следующего:
|
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 не может быть преобразован в специфичный для пользователя тип. |
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");
matlab::cpplib::convertUTF8StringToUTF16String
| matlab::cpplib::convertUTF16StringToUTF8String
| matlab::cpplib::initMATLABApplication
| matlab::cpplib::runMain
| matlab::cpplib::initMATLABLibrary
| matlab::cpplib::initMATLABLibraryAsync
| matlab::cpplib::MATLABLibrary::fevalAsync
| matlab::cpplib::MATLABLibrary::waitForFiguresToClose