ホームページ バックエンド開発 C++ C の Enum 値のテキスト表現を印刷するにはどうすればよいですか?

C の Enum 値のテキスト表現を印刷するにはどうすればよいですか?

Nov 30, 2024 am 08:28 AM

How Can I Print the Textual Representation of a C   Enum Value?

C : Enum 値をテキストとして出力

Enum 型は、定数のセットをシンボル名で表す便利な方法を提供します。デフォルトでは、列挙型は整数値として表されます。ただし、列挙値に関連付けられた実際のテキストを表示する必要がある状況では、デフォルトの動作は適切ではない可能性があります。

例を考えてみましょう。

enum Errors {
    ErrorA = 0,
    ErrorB,
    ErrorC,
};

Errors anError = ErrorA;
std::cout << anError; // Outputs "0"
ログイン後にコピー

この例では、 3 つの可能な値を持つ Errors 列挙型があります: ErrorA、ErrorB、および ErrorC。ここで、ErrorA の数値は 0 です。 anError 変数を出力しようとすると、

if/switch ステートメントに頼らずにこの問題を解決するには、いくつかの方法を使用できます。

1.マップの使用:

#include <map>
#include <string_view>

// Define a map to associate enum values with their string representations
std::map<Errors, std::string_view> errorStrings = {
    {ErrorA, "ErrorA"},
    {ErrorB, "ErrorB"},
    {ErrorC, "ErrorC"},
};

// Overload the `<<` operator to print the string representation
std::ostream& operator<<(std::ostream& out, const Errors value) {
    out << errorStrings[value];
    return out;
}
ログイン後にコピー

このメソッドでは、オーバーロードされた <<演算子は、errorStrings マップ内の列挙値に関連付けられた文字列表現を検索し、それを出力します。

2.構造体の配列の使用:

#include &lt;string_view&gt;

// Define a struct to store enum values and string representations
struct MapEntry {
    Errors value;
    std::string_view str;
};

// Define an array of structures
MapEntry entries[] = {
    {ErrorA, "ErrorA"},
    {ErrorB, "ErrorB"},
    {ErrorC, "ErrorC"},
};

// Overload the `&lt;&lt;` operator to perform a linear search and print the string representation
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const Errors value) {
    for (const MapEntry&amp; entry : entries) {
        if (entry.value == value) {
            out &lt;&lt; entry.str;
            break;
        }
    }
    return out;
}
ログイン後にコピー

このメソッドは、構造体の配列を使用して列挙値とその文字列表現を保存します。線形検索が実行され、指定された列挙値に一致する文字列が検索されます。

3. switch/case の使用:

#include &lt;string&gt;

// Overload the `&lt;&lt;` operator to print the string representation using `switch/case`
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const Errors value) {
    switch (value) {
        case ErrorA: out &lt;&lt; "ErrorA"; break;
        case ErrorB: out &lt;&lt; "ErrorB"; break;
        case ErrorC: out &lt;&lt; "ErrorC"; break;
    }
    return out;
}
ログイン後にコピー

このメソッドでは、オーバーロードされた <<演算子は switch/case ステートメントを使用して、指定された列挙値の適切な文字列表現を直接出力します。

以上がC の Enum 値のテキスト表現を印刷するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

c言語関数形式文字ケース変換手順 c言語関数形式文字ケース変換手順 Mar 03, 2025 pm 05:53 PM

c言語関数形式文字ケース変換手順

C言語関数によって返される値の種類は何ですか?返品値を決定するものは何ですか? C言語関数によって返される値の種類は何ですか?返品値を決定するものは何ですか? Mar 03, 2025 pm 05:52 PM

C言語関数によって返される値の種類は何ですか?返品値を決定するものは何ですか?

GULC:Cライブラリはゼロから構築されています GULC:Cライブラリはゼロから構築されています Mar 03, 2025 pm 05:46 PM

GULC:Cライブラリはゼロから構築されています

C言語関数の定義と呼び出しルールは何ですか、そして C言語関数の定義と呼び出しルールは何ですか、そして Mar 03, 2025 pm 05:53 PM

C言語関数の定義と呼び出しルールは何ですか、そして

C標準テンプレートライブラリ(STL)はどのように機能しますか? C標準テンプレートライブラリ(STL)はどのように機能しますか? Mar 12, 2025 pm 04:50 PM

C標準テンプレートライブラリ(STL)はどのように機能しますか?

明確な使用法とフレーズ共有 明確な使用法とフレーズ共有 Mar 03, 2025 pm 05:51 PM

明確な使用法とフレーズ共有

メモリに保存されているC言語関数の返品値はどこにありますか? メモリに保存されているC言語関数の返品値はどこにありますか? Mar 03, 2025 pm 05:51 PM

メモリに保存されているC言語関数の返品値はどこにありますか?

STL(ソート、検索、変換など)のアルゴリズムを効率的に使用するにはどうすればよいですか? STL(ソート、検索、変換など)のアルゴリズムを効率的に使用するにはどうすればよいですか? Mar 12, 2025 pm 04:52 PM

STL(ソート、検索、変換など)のアルゴリズムを効率的に使用するにはどうすればよいですか?

See all articles