の表を使用して、2 つを組み合わせることをお勧めしますstructs
。
enum Months
{
JANUARY = 1,
FEBRUARY,
APRIL,
//...
DECEMBER,
NUMBER_OF_MONTHS
};
struct Month_Enum_Conversion_Entry
{
Months month_id;
char const * const month_name;
};
Month_Enum_Conversion_Entry month_conversion_table[] =
{
{JANUARY, "January"},
{FEBRUARY, "February"},
//...
{DECEMBER, "December"}
};
static const unsigned int NUM_TABLE_ENTRIES =
sizeof(month_conversion_table) / sizeof(month_conversion_table[0]);
列挙型をテキストに変換するには、テーブルで列挙型を検索し、テキスト フィールドにアクセスします。
std::string Month_ID_To_Name(Months m)
{
char const * p_month_name = NULL;
for (unsigned int i = 0; i < NUM_TABLE_ENTRIES; ++i)
{
if (month_conversion_table[i].month_id == m)
{
p_month_name = month_conversion_table[i].month_name;
break;
}
}
return std::string(p_month_name);
}
2 つの最適化:
std::map
変換を高速化するには、テーブルを にロードします。
- 1 月より前にヌルの未使用のエントリを変換テーブルに追加し、月番号を使用してテーブルにインデックスを付けます。配列にはインデックスと値の間に暗黙の関係があるため、上記の方法は配列にインデックスを付けるよりも堅牢です。上記の例は、ID と名前の間の明示的な関係を示しています。