Maison >développement back-end >C++ >Comment puis-je convertir efficacement des énumérations en chaînes en C moderne ?

Comment puis-je convertir efficacement des énumérations en chaînes en C moderne ?

DDD
DDDoriginal
2024-12-26 14:15:11478parcourir

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

Approches C modernes pour convertir des énumérations en chaînes

Le C contemporain propose des techniques innovantes pour convertir efficacement des énumérations en chaînes. Ces méthodes exploitent les capacités du compilateur et éliminent le besoin de mappage manuel ou de surcharges d'exécution.

Bibliothèque Magic Enum

La bibliothèque d'en-tête Magic Enum fournit une réflexion statique pour les énumérations. en C 17. Il permet une conversion facile vers et depuis des chaînes, ainsi qu'une itération sur une énumération valeurs.

#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 Library (C 20)

La bibliothèque std::format introduite dans C 20 fournit une approche plus standardisée du formatage des chaînes . Il peut être utilisé conjointement avec la fonction enum_name, qui renvoie un std::string_view représentant le nom de l'énumération.

#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"

Expressions C 17 Fold et modèles variadiques

Pour C 17, les expressions de pliage et les modèles variadiques peuvent être combinés pour créer une approche basée sur des tables pour la conversion d'énumérations en chaînes. Cette technique est légèrement plus détaillée que la bibliothèque Magic Enum mais offre plus de contrôle sur le processus de conversion.

Bibliothèque cppformat

La bibliothèque cppformat propose un système de macros basé sur des modèles pour le formatage des chaînes. Il prend en charge la conversion d'énumérations en chaînes via des macros spécialisées.

#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"

Le choix de l'approche la plus appropriée dépend d'exigences spécifiques, telles que la prise en charge de valeurs négatives ou de plages d'énumérations fragmentées. Pour la conversion générale d'énumération en chaîne en C moderne, la bibliothèque Magic Enum est recommandée pour sa simplicité et son efficacité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn