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& operator<<(std::ostream& 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& operator<<(std::ostream& 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中文網其他相關文章!