首頁 > 後端開發 > C++ > 如何在不使用 Switch/If 語句的情況下將 C 枚舉值列印為人類可讀的文字?

如何在不使用 Switch/If 語句的情況下將 C 枚舉值列印為人類可讀的文字?

Susan Sarandon
發布: 2024-11-29 22:08:13
原創
923 人瀏覽過

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

C :以文字格式列印枚舉值

在程式設計領域,經常使用枚舉(enum)將數值分配給不同的狀態或類別。然而,在處理枚舉時,有必要以更有意義的文字格式來表達它們的值,以提高可讀性和理解性。

問題:將枚舉值轉換為文字

考慮一個定義如下的列舉:

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板