>백엔드 개발 >C++ >Switch/If 문을 사용하지 않고 C 열거형 값을 사람이 읽을 수 있는 텍스트로 인쇄하려면 어떻게 해야 합니까?

Switch/If 문을 사용하지 않고 C 열거형 값을 사람이 읽을 수 있는 텍스트로 인쇄하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-29 22:08:13918검색

How Can I Print C   Enum Values as Human-Readable Text Without Using Switch/If Statements?

C : Enum 값을 텍스트 형식으로 인쇄

프로그래밍 영역에서는 열거형(enums)을 사용하여 숫자 값을 할당하는 경우가 많습니다. 별개의 상태 또는 카테고리. 그러나 열거형을 다룰 때는 가독성과 이해도를 높이기 위해 해당 값을 보다 의미 있는 텍스트 형식으로 전달해야 합니다.

문제: 열거형 값을 텍스트로 변환

다음과 같이 정의된 열거형을 생각해 보세요.

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

이제 열거형의 값을 인쇄해 보겠습니다. 열거형 변수:

Errors anError = ErrorA;
std::cout << anError; // Will print "0" instead of "ErrorA"

여기서 문제는 열거형의 숫자 ​​값을 해당 텍스트 표현으로 변환하는 것입니다.

Switch/If를 사용하지 않는 솔루션

1. 맵 사용:

한 가지 접근 방식은 맵을 활용하여 열거형 값과 해당 텍스트 표현 간의 대응 관계를 설정하는 것입니다.

#include <map>
#include <string_view>

// Create a map that associates enum values with string views
std::map<Errors, std::string_view> errorTextMap = {
    {ErrorA, "ErrorA"},
    {ErrorB, "ErrorB"},
    {ErrorC, "ErrorC"},
};

// Overload the << operator to handle enum values
std::ostream&amp; operator<<(std::ostream&amp; out, const Errors value) {
    return out << errorTextMap[value];
}

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

대체 솔루션은 구조 배열을 만드는 것입니다.

#include <string_view>

// Define a structure to store enum values and text representations
struct MapEntry {
    Errors value;
    std::string_view str;
};

// Create an array of structures containing the mapping
const MapEntry errorTextEntries[] = {
    {ErrorA, "ErrorA"},
    {ErrorB, "ErrorB"},
    {ErrorC, "ErrorC"},
    {ErrorA, 0} // Dummy entry to terminate the search
};

// Overload the << operator to handle enum values
std::ostream&amp; operator<<(std::ostream&amp; out, const Errors value) {
    const char* s = nullptr;
    for (const MapEntry* i = errorTextEntries; i->str; i++) {
        if (i->value == value) {
            s = i->str;
            break;
        }
    }

    return out << s;
}

솔루션 테스트:

제안된 기능을 시연하기 위해 솔루션:

#include <iostream>

int main() {
    std::cout << ErrorA << std::endl;
    std::cout << ErrorB << std::endl;
    std::cout << ErrorC << std::endl;

    return 0;
}

출력:

ErrorA
ErrorB
ErrorC

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

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