ホームページ > バックエンド開発 > C++ > 最新の C で列挙型を文字列に効率的に変換するにはどうすればよいですか?

最新の C で列挙型を文字列に効率的に変換するにはどうすればよいですか?

DDD
リリース: 2024-12-26 14:15:11
オリジナル
479 人が閲覧しました

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

列挙型を文字列に変換するための最新の C アプローチ

現代の C は、列挙型を文字列に効率的に変換する革新的な手法を提供します。これらのメソッドはコンパイラの機能を活用し、手動マッピングや実行時のオーバーヘッドの必要性を排除します。

Magic Enum Library

Magic Enum ヘッダー専用ライブラリは、列挙型の静的リフレクションを提供します。 C 17 では、文字列との簡単な変換や、列挙型の反復が可能になります。 value.

#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 ライブラリは、文字列の書式設定に対するより標準化されたアプローチを提供します。 。これは、列挙名を表す std::string_view を返す enum_name 関数と組み合わせて使用​​できます。

#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 Fold Expressions と Variadic Templates

C 17 では、fold 式と可変個引数テンプレートを組み合わせて、列挙型に対するテーブル駆動のアプローチを作成できます。文字列変換。この手法は、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 での汎用 enum から文字列への変換には、そのシンプルさと効率性の点で Magic Enum ライブラリをお勧めします。

以上が最新の C で列挙型を文字列に効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート