Выполнение функции 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 | Одно из следующих:
|
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. |
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::convertUTF16StringToUTF8String | matlab::cpplib::convertUTF8StringToUTF16String | matlab::cpplib::initMATLABApplication | matlab::cpplib::initMATLABLibrary | matlab::cpplib::initMATLABLibraryAsync | matlab::cpplib::MATLABLibrary::fevalAsync | matlab::cpplib::MATLABLibrary::waitForFiguresToClose | matlab::cpplib::runMain