私のクラスでは、charデータ[1000]があります。私は、キータイプの文字列の地図を私が望むあらゆるタイプのデータにマッピングするためのマップを持つことができるようにしたい。boost :: char []を持つ任意のマップ
私のドライバでは、マップから値を取得したいと考えています。基本的に私のマップを使ってクラスのすべてのデータを保持できるので、クラスのヘッダーで定義されたデータに限らず、実行時にデータを追加したり削除することができます。例えば、クラス定義について
:
public:
void populateMap()
{
classMap["imgData"] = data;
};
private:
map<string,boost::any> classMap;
char data[1000];
ドライバー:私はこれを行うと
int main(){
myClass test;
map<string,boost::any> myMap;
test.populateMap()//populates map with the char data
myMap = test.getMap();
char myData[1000] = boost::any_cast<char*>(myMap["imgData"]); //runtime error
}
が、私はランタイムキャストエラーが発生します。私はchar [definite_size]とchar *の両方に精通していません。誰かが私の問題がどこにあるのか教えてくれますか?私は文字配列をマップに格納する人々の例はあまり見ない。 char [definite_size]をマップに保存する適切な方法は何ですか?キャストの外観はどのようにマップから外に出てくるのですか(boost ::は地図から抜け出すときに適切な型にキャストする必要があります)
この愚かなCの代わりに、どこでも 'std :: array'を使ってみてください。 –
私はそれをやろうとしましたが、マップに配列を格納するのが非常に遅いです。配列のアドレスをマップに格納しようとしましたが、どうすれば元に戻すことができますか? std :: arrayと同じ働きをするが、std :: arrayはもはや存在しないboost :: arrayを使用していることに注意してください。最終的には、boost :: arrayをchar *に変換する必要があります。 – imjojo42
ポインタを保存したい場合は、 'std :: unique_ptr>(新しいstd :: array )'または 'std :: unique_ptr (new char [1000])'のいずれかを試してください。後者は配列として直接アクセスできます。 –