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