> 백엔드 개발 > C++ > C 열거형을 문자열에 효율적으로 매핑하는 방법은 무엇입니까?

C 열거형을 문자열에 효율적으로 매핑하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-10 01:22:12
원래의
525명이 탐색했습니다.

How to Efficiently Map C   Enums to Strings?

C 열거형을 문자열로 쉽게 매핑하는 방법

타사 라이브러리 헤더에 정의된 열거형을 활용하는 경우 열거형 값을 사용자로 변환하는 메커니즘을 구축해야 합니다. -정의된 문자열 또는 그 반대.

표준 접근 방식

간단한 접근 방식에는 일련의 기능을 만드는 것이 포함됩니다.

enum MyEnum {VAL1, VAL2,VAL3};

String getStringFromEnum(MyEnum e)
{
  switch e
  {
  case VAL1: return "Value 1";
  case VAL2: return "Value 2";
  case VAL1: return "Value 3";
  default: throw Exception("Bad MyEnum");
  }
}
로그인 후 복사

그러나 이 방법은 우아함이 부족하고 C 스타일 접근 방식과 유사합니다.

템플릿 기반 솔루션

더 보기 정교한 접근 방식은 템플릿을 활용합니다.

std::map<MyEnum, char const*> MyMap;
//...
MyMap.insert(std::make_pair(VAL1, "Value 1"));
//...
char const* enumString = MyMap[e];
로그인 후 복사

이 방법은 깔끔하고 효율적인 매핑 메커니즘을 제공합니다.

map_init Helper Class

구문적 편의를 위해 , 다음 도우미 클래스를 사용할 수 있습니다:

template<typename T> struct map_init_helper
{
    map_init_helper(T&amp; d) : data(d) {}
    T&amp; data;
    map_init_helper&amp; operator() (typename T::key_type const&amp; key, typename T::mapped_type const&amp; value)
    {
        data[key] = value;
        return *this;
    }
};

template<typename T> map_init_helper<T> map_init(T&amp; item)
{
    return map_init_helper<T>(item);
}
로그인 후 복사

이를 통해 도우미를 사용하면 다음과 같이 매핑을 수행할 수 있습니다.

std::map<MyEnum, char const*> MyMap;
map_init(MyMap)
    (VAL1, "Value 1")
    (VAL2, "Value 2")
    (VAL3, "Value 3");
로그인 후 복사

이 단순화된 구문을 사용하면 자세한 삽입 문이 필요하지 않습니다.

위 내용은 C 열거형을 문자열에 효율적으로 매핑하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿