>백엔드 개발 >C++ >소스 코드를 수정하지 않고 C 열거형을 문자열로 자동 변환하는 방법은 무엇입니까?

소스 코드를 수정하지 않고 C 열거형을 문자열로 자동 변환하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-17 18:51:16418검색

How to Automatically Convert C   Enums to Strings Without Modifying Source Code?

C 열거형을 문자열로 변환하는 방법

이름이 지정된 C 열거형으로 작업할 때 열거형 값을 해당하는 열거형 값으로 변환하는 시나리오가 발생할 수 있습니다. 문자열 표현이 필요합니다. 이 변환을 위한 여러 접근 방식이 있지만 이 문서에서는 소스 코드를 수정하지 않고 프로젝트의 모든 열거형을 문자열로 변환하는 함수 생성과 관련된 특정 쿼리를 다룹니다.

X-Macros: A Comprehensive Solution

권장되는 접근 방식은 X-매크로를 활용하는 것입니다. 구현 예는 다음과 같습니다.

#include <iostream>

enum Colours {
#   define X(a) a,
#   include "colours.def"
#   undef X
    ColoursCount
};

char const* const colours_str[] = {
#   define X(a) #a,
#   include "colours.def"
#   undef X
    0
};

std::ostream&amp; operator<<(std::ostream&amp; os, enum Colours c)
{
    if (c >= ColoursCount || c < 0) return os << "???";
    return os << colours_str[c];
}

int main()
{
    std::cout << Red << Blue << Green << Cyan << Yellow << Magenta << std::endl;
}

colors.def 파일에서 다음과 같이 열거형을 정의합니다.

X(Red)
X(Green)
X(Blue)
X(Cyan)
X(Yellow)
X(Magenta)

이 방법은 모든 항목에 대한 변환 함수를 생성하는 유연한 방법을 제공합니다. 소스 코드를 수정하지 않고도 프로젝트에 열거형을 추가할 수 있습니다.

사용자 정의 가능한 문자열 생성

또는 생성된 문자열 표현을 사용자 정의할 수 있는 방법을 선택할 수 있습니다. 다음 코드 조각은 이를 달성하는 방법을 보여줍니다.

#define X(a, b) a,
#define X(a, b) b,

X(Red, "red")
X(Green, "green")
// etc.

이 접근 방식은 생성된 문자열을 더 효과적으로 제어할 수 있으며 애플리케이션에 대한 특정 사용자 정의가 필요할 때 특히 유용할 수 있습니다.

위 내용은 소스 코드를 수정하지 않고 C 열거형을 문자열로 자동 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.