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中文网其他相关文章!