私はマップを持っています。ここで、文字列は属性の名前を表し、2番目の値はこの属性が持つべきです。C++のマップタイプのタイプ
map.insert(make_pair("X", iDatatype::iUint));
map.insert(make_pair("Y", iDatatype::iUint));
map.insert(make_pair("RADIANT", iDatatype::iFloat));
ここで、iDatatypeはすべての可能な型の列挙です。プログラムは、例えば、それはマップを見てより「RADIANT」iDatatype値を見つける(iter->秒)を作成し、ケースを切り替えるために行くためのコマンドを取得した場合
typedef enum
{
iUnknown = 0,
iByte = 1,
iChar = 2,
iUChar = 3,
iShort = 4.....
} iDatatype;
。
switch (iter->second) {
case iDatatype::iUint:
uint value = ......
// You gotta do what you gonna do
break;
} .......
スイッチのケースでは、属性のタイプに依存する関数が呼び出されます。
このコードは機能します。しかし、文字列を型にマップするのが最良の解決策であるかどうかはわかりません。 私は何を探すべきか分からないという問題はありますか?そのような目的のために一般的に使用されている方法や技術をお勧めしますか?大いに感謝する。
これからは正式なのですが、C++ 11と実装コンパイラの若い時代のために、C + + 11度f 'std :: function'が適切です。誰もがあなたが最新のgcc/VS /それを使うために何かを必要としているという事実を知っているわけではありません。もちろん、私は「C++ 11の機能を使用しない」とは言っていませんが、「そのように言及してください」とは言いません。 –
@ChristianRau:ちょうどその新しいことは、ロックの下でクロールし、C++ 1234BCの機能を可能な限り使用し、常に新機能について警告する必要があるということを意味するものではありません。 – Dani
いいえ、それを使うのは良い考えです。しかし、初心者がC++の標準化プロセスを知っていることを期待しないでください(あるいはOPのために保持する必要はありません)。次の質問は "私のコンパイラが' std :: function'を見つけられないのはなぜですか? –