std::error_category

std::error_category (오류 카테고리)

오류 코드·오류 조건의 의미를 정의하는 카테고리를 나타내는 기초 클래스예요. 오류 코드의 이름, 메시지, 기본 오류 조건 등을 제공해요. std::error_code·std::error_condition의 근간이에요. C++11부터 있어요.

출처: cppreference

본문

<system_error> 헤더에 정의돼 있고, 오류 카테고리 기초 클래스예요.

class error_category;

std::error_category는 특정 오류 코드 시스템(카테고리)의 특성을 정의하는 추상 기초 클래스예요. 각 std::error_code·std::error_condition은 자기 카테고리의 error_category 객체를 가리켜요. 카테고리가 다르면 같은 정수 값이라도 다른 의미를 가져요.

멤버 함수:

  • name() const noexcept: 카테고리의 이름을 돌려줘요 (예: "generic", "system").
  • message(int) const: 주어진 코드 값의 설명 문자열을 돌려줘요. (순수 가상 — 카테고리가 구현해야 함.)
  • default_error_condition(int) const: 주어진 코드 값이 나타내는 기본 std::error_condition을 돌려줘요.
  • equivalent(int, const error_condition&) const, equivalent(const error_code&, int) const: 코드가 특정 조건과 동등한지 판정해요.
  • 연산자 operator==/operator!=: 카테고리 객체가 같은지 비교해요(주소 비교).

표준 라이브러리는 두 개의 표준 카테고리 객체를 제공해요.

  • std::generic_category() — POSIX errno 도메인(포팅 가능한 오류).
  • std::system_category() — 플랫폼 특정 시스템 오류.

사용자는 자체 카테고리를 만들려면 error_category를 상속받고 name()message()를 구현할 수 있어요. 다만 표준은 보통 실제로 커스텀 카테고리를 직접 만드는 대신 std::is_error_code_enum/std::is_error_condition_enum 특수화와 make_error_code/make_error_condition 오버로드로 열거 타입을 오류 코드 시스템에 연결하도록 권장해요.

#include <system_error>
#include <iostream>

std::cout << std::generic_category().name() << '\n'; // "generic"

더 알아보기 (Learn more)

cppreference