1

離散型の値を保持するコンテナー (できればマップ) を作成したい:

KEY     Value
Omega    1.9  
Output   myoutput.out  
sizex    82  
#####    ###  

ここで、キーは = "std::string"で、値は"INT/ DOUBLE/ String"のいずれかです

みたいなことを宣言してみました。

template<typename T>  
map<string, typename T> mymap;  

しかし、うまくいかないことは確かです。

:(

それらを異なる変数に分割する簡単な方法があることは知っていますが、それはコードの肥大化につながります。
std::map<key_value key, class Allocator = allocator<pair<const Key,T>>
また、コンパイル中にスペースを生成するには、「キー」と「値」に関する情報を知る必要が あるという事実についても明確です。

しかし、この問題はかなり長い間私を悩ませており、それを整理する必要があるだけです
:D

4

2 に答える 2

2
#include <map>

using namespace std;


union mytypes_t {
  int c;
  double i;
  char* c;
} 

int main()
{
    Map<int, mytypes_t> myObject;
}

組合の詳細

于 2012-07-22T01:22:19.343 に答える
2

あなたが述べたように、簡単な解決策は、データを3つの異なる配列に分割し、適切なコンテナー内の要素を見つけるラッパーを作成することです(ルックアップを実行するコードが変数の型を知っていると仮定すると、そうでなければこれでさえ複雑になります) )。

別の方法として、バリアント型 (boost variant) または型消去 (boost any) を使用して、さまざまな型を処理するコンテナーを使用することもできます。ブーストを使用できない場合、いくつかの単純なタイプの消去を実装することはそれほど複雑ではありませんが、本当に必要でない限り、私はそれを避けます(つまり、自分の四角いホイールよりも既製の既製のソリューションを好む)

于 2012-07-22T01:43:22.667 に答える