Функция make_error_code
Функция make_error_code создает и возвращает объект типа std::error_code. Она принимает в качестве параметра значение перечисления, которое должно быть зарегистрировано как совместимое с std::error_code. Обычно это перечисления, для которых определена специализация шаблона is_error_code_enum. Функция используется для преобразования кодов ошибок, специфичных для конкретной библиотеки или приложения, в универсальный формат error_code.
Синтаксис
std::error_code make_error_code(ErrorCodeEnum e) noexcept;
Пример
Давайте создадим собственное перечисление ошибок и функцию make_error_code для него, а затем получим объект error_code и выведем его сообщение:
#include <iostream>
#include <system_error>
enum class MyError
{
success = 0,
invalid_argument = 1,
out_of_range = 2
};
namespace std
{
template <>
struct is_error_code_enum<MyError> : true_type {};
}
std::error_code make_error_code(MyError e)
{
return std::error_code(static_cast<int>(e), std::generic_category());
}
int main()
{
std::error_code ec = make_error_code(MyError::invalid_argument);
std::cout << "Value: " << ec.value() << std::endl;
std::cout << "Message: " << ec.message() << std::endl;
return 0;
}
Результат выполнения кода:
"Value: 1"
"Message: Invalid argument"
Пример
Давайте проверим, что созданный код ошибки соответствует нашему перечислению, используя оператор сравнения:
#include <iostream>
#include <system_error>
enum class MyError
{
success = 0,
invalid_argument = 1,
out_of_range = 2
};
namespace std
{
template <>
struct is_error_code_enum<MyError> : true_type {};
}
std::error_code make_error_code(MyError e)
{
return std::error_code(static_cast<int>(e), std::generic_category());
}
int main()
{
std::error_code ec = make_error_code(MyError::out_of_range);
if (ec == MyError::out_of_range) {
std::cout << "Error matches out_of_range" << std::endl;
} else {
std::cout << "Error does not match" << std::endl;
}
return 0;
}
Результат выполнения кода:
"Error matches out_of_range"
Смотрите также
-
класс
error_code,
который представляет код ошибки -
метод
message,
который возвращает текстовое описание ошибки -
метод
value,
который возвращает числовое значение кода ошибки -
класс
system_error,
который используется для генерации исключений на основе error_code