首頁 >後端開發 >C++ >如何列印 C 枚舉值的文字表示形式?

如何列印 C 枚舉值的文字表示形式?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-30 08:28:111001瀏覽

How Can I Print the Textual Representation of a C   Enum Value?

C :將枚舉值列印為文字

枚舉類型提供了一種方便的方法來表示一組具有符號名稱的常量。預設情況下,枚舉表示為整數值。但是,在需要顯示與枚舉值關聯的實際文字的情況下,預設行為可能不合適。

讓我們考慮一個範例:

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

Errors anError = ErrorA;
std::cout << anError; // Outputs "0"

在此範例中,我們有一個包含三個可能值的Errors 枚舉:ErrorA、ErrorB 和ErrorC,其中ErrorA 的數值為0。當我們嘗試列印 anError 變數時,它輸出“0”而不是所需的“ErrorA”。

要在不訴諸if/switch 語句的情況下解決此問題,可以採用多種方法:

1.使用Map:

#include <map>
#include <string_view>

// Define a map to associate enum values with their string representations
std::map<Errors, std::string_view> errorStrings = {
    {ErrorA, "ErrorA"},
    {ErrorB, "ErrorB"},
    {ErrorC, "ErrorC"},
};

// Overload the `<<` operator to print the string representation
std::ostream& operator<<(std::ostream& out, const Errors value) {
    out << errorStrings[value];
    return out;
}

使用此方法,重載的

2.使用結構數組:

#include <string_view>

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

// Define an array of structures
MapEntry entries[] = {
    {ErrorA, "ErrorA"},
    {ErrorB, "ErrorB"},
    {ErrorC, "ErrorC"},
};

// Overload the `<<` operator to perform a linear search and print the string representation
std::ostream& operator<<(std::ostream& out, const Errors value) {
    for (const MapEntry& entry : entries) {
        if (entry.value == value) {
            out << entry.str;
            break;
        }
    }
    return out;
}

此方法使用結構數組來儲存枚舉值及其字串表示形式。執行線性搜尋以尋找指定枚舉值的匹配字串。

3.使用switch/case:

#include <string>

// Overload the `<<` operator to print the string representation using `switch/case`
std::ostream& operator<<(std::ostream& out, const Errors value) {
    switch (value) {
        case ErrorA: out << "ErrorA"; break;
        case ErrorB: out << "ErrorB"; break;
        case ErrorC: out << "ErrorC"; break;
    }
    return out;
}

在此方法中,重載的

以上是如何列印 C 枚舉值的文字表示形式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn