首页 > 后端开发 > C++ > 如何打印 C 枚举值的文本表示形式?

如何打印 C 枚举值的文本表示形式?

Mary-Kate Olsen
发布: 2024-11-30 08:28:11
原创
923 人浏览过

How Can I Print the Textual Representation of a C   Enum Value?

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板