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