2

マップ内の文字列ストリームをポスト初期化するにはどうすればよいですか?

それも可能ですか、それとも文字列ストリーム*を作成する必要がありますか?

std::map<std::string, std::stringstream> mapTopics;

if(mapTopics.end() == mapTopics.find(Topic))
{
    mapTopics[Topic] = std::stringstream(""); // Post Initialize <---
}

std::map<std::string, std::stringstream>::iterator  mapTopicsIter = mapTopics.find(Topic);
mapTopicsIter->second << "    <say speaker=\"" << sSpeaker << "\">" << label << "</say>" << std::endl;
4

2 に答える 2

4

マップ内の文字列ストリームをポスト初期化するにはどうすればよいですか?

それはいけません。STLコンテナでは、データ要素がコピー可能である必要があり、ストリームはコピー可能ではありません。

なぜマップにストリームを入れたいのですか?文字列を保存できませんか?

本当に必死の場合は、(おそらく動的に割り当てられた)文字列ストリームへのポインタを格納する必要があります。

std::map<std::string, std::shared_ptr<std::stringstream> > stream_map;

これには、ストリーム基本クラスへのポインタを格納する場合、後で他のストリームをマップに追加できるという利点があります。

于 2010-07-11T15:24:37.213 に答える
0

それがあなたが何を意味するのかわからないが、どうですか:

std::stringstream ss;
ss << "blablablabla";
ss.str("") /*Initialize*/
于 2012-08-17T20:02:54.630 に答える