首页 >后端开发 >C++ >如何在现代 C 中有效地将枚举转换为字符串?

如何在现代 C 中有效地将枚举转换为字符串?

DDD
DDD原创
2024-12-26 14:15:11527浏览

How Can I Efficiently Convert Enums to Strings in Modern C  ?

将枚举转换为字符串的现代 C 方法

当代 C 提供了有效地将枚举转换为字符串的创新技术。这些方法利用编译器的功能,消除了手动映射或运行时开销的需要。

Magic Enum Library

Magic Enum 仅标头库为枚举提供静态反射在 C 17 中。它允许轻松地与字符串进行转换,以及对枚举进行迭代

#include <magic_enum.hpp>

enum class Color { RED = 2, BLUE = 4, GREEN = 8 };

Color color = Color::RED;
std::string color_name = magic_enum::enum_name(color); // color_name -> "RED"

std::format 库 (C 20)

C 20 中引入的 std::format 库提供了一种更标准化的字符串格式化方法。它可以与 enum_name 函数结合使用,该函数返回表示枚举名称的 std::string_view。

#include <format>
#include <magic_enum.hpp>

enum class Color { RED = 2, BLUE = 4, GREEN = 8 };

Color color = Color::RED;
std::string color_name = std::format("{}", magic_enum::enum_name(color)); // color_name -> "RED"

C 17 折叠表达式和可变参数模板

对于 C 17,可以组合折叠表达式和可变参数模板来创建用于枚举到字符串转换的表驱动方法。此技术比 Magic Enum 库稍微详细一些,但提供了对转换过程的更多控制。

cppformat 库

cppformat 库提供基于模板的宏系统用于字符串格式化。它支持通过专门的宏进行枚举到字符串的转换。

#include <cppformat/format.h>

enum class Color { RED = 2, BLUE = 4, GREEN = 8 };

Color color = Color::RED;
std::string color_name = FMT_STRING(color); // color_name -> "RED"

选择最合适的方法取决于特定要求,例如对负值或分段枚举范围的支持。对于现代 C 中的通用枚举到字符串的转换,建议使用 Magic Enum 库,因为它简单且高效。

以上是如何在现代 C 中有效地将枚举转换为字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!

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