Чтобы переопределить поведение ошибки по умолчанию, можно поймать исключения, выданные в MEX-функциях при вызове MATLAB® функций.
Этот код заставляет MATLAB выдавать исключение, потому что он неправильно определяет входной параметр для MATLAB sqrt
функция. Блок catch обрабатывает matlab::engine::MATLABException
отображение строки, описывающей исключение, в командном окне MATLAB.
ArrayFactory factory;
std::shared_ptr<matlab::engine::MATLABEngine> matlabPtr = getEngine();
// Variable with no value causes error
std::vector<matlab::data::Array> arg;
try {
matlab::data::Array result =
matlabPtr->feval(u"sqrt", arg);
}
catch (const matlab::engine::MATLABException& ex) {
matlabPtr->feval(u"disp", 0, std::vector<Array>({factory.createScalar(ex.what()) }));
}