Постинициализация потока строк внутри карты? - PullRequest
2 голосов
/ 11 июля 2010

Как я могу постинициализировать поток строк внутри карты?

Это вообще возможно или мне нужно создать поток строк *?

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;

Ответы [ 2 ]

4 голосов
/ 11 июля 2010

Как я могу послеинициализировать поток строк внутри карты?

Вы не можете.Контейнеры STL требуют, чтобы их элементы данных были копируемыми, а потоки - не копируемыми.

Почему вы хотите иметь потоки на карте?Вы не можете хранить строки?

Если вы действительно в отчаянии, вам придется хранить указатели на (скорее всего, динамически распределяемые) строковые потоки:

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

Это имеет то преимущество, что вы сохраните указатели на потокбазовый класс, вы могли бы позже также добавить другие потоки на карту.

0 голосов
/ 18 августа 2012

Не уверен Если это то, что вы имеете в виду, но как насчет:

std::stringstream ss;
ss << "blablablabla";
ss.str("") /*Initialize*/
...