私は、boost :: anyを使用して異機種のマップを使用することを推奨しています。私。配列を持つC++異種マップ
map<string,boost::any>
上記の手法を行っているマップに格納されている配列を格納している人はいますか?
私は、次の操作を行うことができた:
boost::array<char,100> myArr;
map<string,boost::any> myMap;
myArr[51] = a;
myMap["imageData"] = myArr;
これに伴う問題は、これが二回メモリ内の配列全体を格納しているようだということです。 私は少しそれを変更し、これを行う場合は、次の
boost::array<char,100> myArr;
map<string,boost::any> myMap;
myArr[51] = a;
myMap["imageData"] = &myArr;
私はどのようにマップの外にデータを取り戻すには考えています。ポインタを作成するにはどうすればよいですか?私はできますか?他の誰かが似たようなことをすることができましたか、それとももっと似たようなやり方をよりエレガントにするためのアイディアがありますか?
元々、私はchar[100]
をマップに保存したかったのですが、マップで一度キャストする方法が見つからないことがありました(マップ内のデータを使用するには、適切なタイプにキャストする必要があります)。 char[someSize]
をマップから外すことを可能にするソリューションが理想的です。
実際の目標は何ですか? –
@BjörnPollexランタイムパラメータを持つクラスを作成しようとしています。つまり、クラスに定義されている 'int width = 5; 'の代わりに、クラスは' map classMap'を持ち、クラスのユーザは 'classMap [" width "] = 5 ; 'classMapにchar [someSize]の値を格納するのに問題がありますが、これはうまくいきます。例: 'char myChar [1000];' 'classMap [" imageData "] = myChar; はchar [1000]をマップに保存しますが、使用する前にデータをキャストする必要があるため使用できませんそれ。 –
imjojo42