首页 >后端开发 >C++ >如何在不修改源代码的情况下自动将 C 枚举转换为字符串?

如何在不修改源代码的情况下自动将 C 枚举转换为字符串?

Susan Sarandon
Susan Sarandon原创
2024-12-17 18:51:16490浏览

How to Automatically Convert C   Enums to Strings Without Modifying Source Code?

如何将 C 枚举转换为字符串

使用命名 C 枚举时,您可能会遇到将枚举值转换为其对应的场景字符串表示是必要的。虽然此转换存在多种方法,但本文解决了有关生成函数的特定查询,该函数用于将项目中的所有枚举转换为字符串,而无需修改源代码。

X-Macros:综合解决方案

推荐的方法涉及使用 X 宏。下面给出了一个示例实现:

#include <iostream>

enum Colours {
#   define X(a) a,
#   include "colours.def"
#   undef X
    ColoursCount
};

char const* const colours_str[] = {
#   define X(a) #a,
#   include "colours.def"
#   undef X
    0
};

std::ostream&amp; operator<<(std::ostream&amp; os, enum Colours c)
{
    if (c >= ColoursCount || c < 0) return os << "???";
    return os << colours_str[c];
}

int main()
{
    std::cout << Red << Blue << Green << Cyan << Yellow << Magenta << std::endl;
}

在colors.def文件中,定义枚举如下:

X(Red)
X(Green)
X(Blue)
X(Cyan)
X(Yellow)
X(Magenta)

此方法提供了一种灵活的方式来为所有类型生成转换函数无需对源代码进行任何修改即可在项目中使用枚举。

可自定义字符串生成

或者,您可以选择允许自定义生成的字符串表示形式的方法。以下代码片段说明了如何实现此目的:

#define X(a, b) a,
#define X(a, b) b,

X(Red, "red")
X(Green, "green")
// etc.

此方法可以更好地控制生成的字符串,并且在您需要对应用程序进行特定自定义时特别有用。

以上是如何在不修改源代码的情况下自动将 C 枚举转换为字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn