C : 列挙値をテキスト形式で出力する
プログラミングの分野では、数値を割り当てるために列挙型 (enum) がよく使用されます。異なる状態またはカテゴリ。ただし、列挙型を扱う場合、読みやすさと理解を向上させるために、その値をより意味のあるテキスト形式で伝える必要があります。
問題: 列挙型値をテキストに変換する
次のように定義された列挙型について考えます:
enum Errors { ErrorA = 0, ErrorB, ErrorC, };
次に、値を出力してみます。 enum 変数の:
Errors anError = ErrorA; std::cout << anError; // Will print "0" instead of "ErrorA"
ここでの課題は、enum の数値を対応するテキスト表現に変換することにあります。
Switch/If を使用しない解決策
1.マップの使用:
1 つのアプローチには、マップを利用して列挙値とそのテキスト表現の間の対応関係を確立することが含まれます:
#include <map> #include <string_view> // Create a map that associates enum values with string views std::map<Errors, std::string_view> errorTextMap = { {ErrorA, "ErrorA"}, {ErrorB, "ErrorB"}, {ErrorC, "ErrorC"}, }; // Overload the << operator to handle enum values std::ostream& operator<<(std::ostream& out, const Errors value) { return out << errorTextMap[value]; }
2.線形検索での構造体の配列の使用:
別の解決策には、構造体の配列の作成が含まれます:
#include <string_view> // Define a structure to store enum values and text representations struct MapEntry { Errors value; std::string_view str; }; // Create an array of structures containing the mapping const MapEntry errorTextEntries[] = { {ErrorA, "ErrorA"}, {ErrorB, "ErrorB"}, {ErrorC, "ErrorC"}, {ErrorA, 0} // Dummy entry to terminate the search }; // Overload the << operator to handle enum values std::ostream& operator<<(std::ostream& out, const Errors value) { const char* s = nullptr; for (const MapEntry* i = errorTextEntries; i->str; i++) { if (i->value == value) { s = i->str; break; } } return out << s; }
ソリューションのテスト:
提案された機能を実証するためソリューション:
#include <iostream> int main() { std::cout << ErrorA << std::endl; std::cout << ErrorB << std::endl; std::cout << ErrorC << std::endl; return 0; }
出力:
ErrorA ErrorB ErrorC
以上がswitch/if ステートメントを使用せずに、C の Enum 値を人間が読めるテキストとして出力するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。