これがC ++にある場合:
typedef enum {Unknown,USA,Canada,France,England,Italy,Spain,Australia,} origin_t;
origin_t Country;
char *current;
cin>>current;
Country
ユーザーが入力した c-Stringに設定するにはどうすればよいcurrent
でしょうか? リストが大きいので、1つずつ比較する以外に? 最速の方法?どうもありがとうございます。
Javaの場合のように、C++間またはC++での直接変換はありませんenum
。string
char*
効率的な方法は、マップを作成することです。
#include <map>
#include <string>
typedef enum {Unknown,USA,Canada,France,England,Italy,Spain,Australia,} origin_t;
std::map<std::string, origin_t> countries;
countries["Unknown"] = Unknown;
countries["USA"] = USA;
//...
origin_t Country;
std::string current;
cin>>current;
Country = countries[current];
私のサンプルでは、std::string
の代わりにを使用していることに注意してくださいchar*
。これは、を使用する強い理由がない限り、実行する必要がありますchar*
。
私が使用するのは、POD 構造体の配列です。構造体には、列挙型と、特定の列挙型に対応する文字の const char * が含まれます。次に、 std::find を使用して、必要に応じて enum または char * を検索します。
POD の配列の利点は、プログラムのロード時にすべてが初期化されることです。マップをロードする必要はありません。
欠点は、std::find の線形検索です。しかし、多数の列挙値を使用したことがないので、これは問題ではありませんでした。
上記はすべて実装ファイルに隠されています。ヘッダーには関数だけがあります。通常、1 つは enum から std::string に変換し、もう 1 つは std::string から enum に変換します。