> 백엔드 개발 > C++ > if/switch 문을 사용하지 않고 C 열거형 값을 텍스트로 인쇄하려면 어떻게 해야 합니까?

if/switch 문을 사용하지 않고 C 열거형 값을 텍스트로 인쇄하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2024-11-27 19:24:15
원래의
537명이 탐색했습니다.

How Can I Print C   Enum Values as Text Without Using if/switch Statements?

C에서 if/switch 없이 열거형 값을 텍스트로 인쇄하기

C에서 열거형은 기호 이름에 정수 값을 할당하는 방법을 제공합니다. 그러나 열거형 값을 콘솔에 인쇄할 때 일반적으로 기호 이름 대신 연결된 정수를 출력합니다.

이 제한을 극복하고 열거형 값을 텍스트로 인쇄하려면 세 가지 효율적인 솔루션을 살펴보겠습니다.

1. 맵 사용:

std::map을 활용하면 해당 텍스트 표현에 대한 열거형 값을 효율적으로 조회할 수 있습니다.

#include <map>
#include <string_view>

enum Errors { ErrorA = 0, ErrorB, ErrorC };

// Custom insertion function for map
#define INSERT_ELEMENT(p) result.emplace(p, #p);

// Initialize the map
static const auto strings = []() {
    std::map<Errors, std::string_view> result;
    INSERT_ELEMENT(ErrorA);
    INSERT_ELEMENT(ErrorB);
    INSERT_ELEMENT(ErrorC);
    return result;
};

std::ostream& operator<<(std::ostream& out, const Errors value) {
    return out << strings[value];
}
로그인 후 복사

2. 선형 검색과 함께 구조 배열 사용:

이 접근 방식에는 각각 열거형 값과 해당 텍스트가 포함된 구조 배열을 만드는 작업이 포함됩니다. 그런 다음 선형 검색을 사용하여 원하는 열거형 값에 대한 텍스트를 검색합니다.

#include <string_view>

enum Errors { ErrorA = 0, ErrorB, ErrorC };

// Structure for mapping enum to text
struct MapEntry {
    Errors value;
    std::string_view str;
};

std::ostream& operator<<(std::ostream& out, const Errors value) {
    const MapEntry entries[] = {
        {ErrorA, "ErrorA"},
        {ErrorB, "ErrorB"},
        {ErrorC, "ErrorC"}
    };

    const char* s = nullptr;
    for (const MapEntry* i = entries; i->str; i++) {
        if (i->value == value) {
            s = i->str;
            break;
        }
    }

    return out << s;
}
로그인 후 복사

3. 스위치/케이스 사용:

맵 접근 방식보다 덜 효율적이지만 스위치/케이스를 사용하여 열거형 값을 텍스트에 매핑할 수도 있습니다.

#include <string>

enum Errors { ErrorA = 0, ErrorB, ErrorC };

std::ostream& operator<<(std::ostream& out, const Errors value) {
    return out << [value]() {
        switch (value) {
            case ErrorA: return "ErrorA";
            case ErrorB: return "ErrorB";
            case ErrorC: return "ErrorC";
        }
    };
}
로그인 후 복사

위 내용은 if/switch 문을 사용하지 않고 C 열거형 값을 텍스트로 인쇄하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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