首頁 >後端開發 >C++ >如何在現代 C 中有效地將枚舉轉換為字串?

如何在現代 C 中有效地將枚舉轉換為字串?

DDD
DDD原創
2024-12-26 14:15:11477瀏覽

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