私はあなたが持っていると思います
size = MaxNum
もしfirst == "MaxNum"
そして
size = MinNum
もしfirst == "MinNum"
。(選択する変数のセット) の可能な値のセットが小さい場合は、一連のステートメントのfirst
周りに割り当てを配置するだけで済みます。最後にエラーメッセージを書くステートメントを入れます。if
else if
else
ただし、すべてのケースをハードコーディングする必要があります。
if (first == "MaxNum") {
size = MaxNum;
}
else if (first == "MinNum") {
size = MinNum;
}
//...
size
したがって、変数の数が増えるにつれて、割り当てを決定するコードが大きくなります。これは悪いスタイルであり、非常にメンテナンスが難しく、エラーが発生しやすいと考えられています。
これを行いたくない場合は、プログラムで複数の変数を使用しないでください。ただし、これらすべての可能なキーとその値を含む 1 つのコンテナー変数を使用してください。アソシエイト コンテナと呼ばれるもので、C++ にはそのstd::map
ようなデータ構造を実装する型があります。
// Your container for the sizes (or whatever you want to call it)
std::map<std::string, int> sizes;
sizes["MinNum"] = 1;
sizes["MaxNum"] = 100;
// ... more values ...
// Accessing this container with a variable as the key:
size = sizes[first];
ご覧のとおり、文字列変数をキーとして使用してこのコンテナーにアクセスするのは非常に簡単です。sizes[first]
キーが変数の現在の内容の値と等しいコンテナー内の値を単に提供しますfirst
。
C++ (および C) ソース コードに関する非常に重要な事実は、実行時に変数の名前にアクセスできないことです。したがって、基本的に、プログラムに影響を与えることなく名前を変更できます。必要なもの (変数、列挙型、クラス、関数、それらのパラメーターなどの名前のクエリ) は、コード上で動作するコード (「メタコード」) を記述するため、イントロスペクションまたはメタプログラミングとして知られています。
C++ は、デフォルトではメタプログラミング機能を提供していません (私が知っている唯一の例外: typeid
、変数名/定義には何もありません)。デフォルトでは、この制限をハックして、これらの定義のヘッダー ファイルを解析し、実行時にアクセス可能な別の方法でそれらを格納する追加のステップをビルド プロセスに含めることができます。しかし、地図はより良い方法です、私を信じてください.