Как скопировать из одного объекта stringstream в другой в С++?
У меня std::stringstream
объект ss1
. Теперь я хотел бы создать еще одну копию из этого.
Я пробую это:
std::stringstream ss2 = ss1;
или
std::stringstream ss2(ss1)
не работает
Сообщение об ошибке выглядит следующим образом:
std:: ios:: basic_ios (const std:: ios &) недоступен из BSL:: basic_stringstream, BSL:: Распределитель > :: basic_stringstream (Const BSL:: basic_stringstream, BSL:: Распределитель > &.)
Ответы
Ответ 1
Действительно, потоки не копируются (хотя они подвижны).
В зависимости от вашего использования, следующее работает достаточно хорошо:
#include <iostream>
#include <sstream>
int main()
{
std::stringstream ss1;
ss1 << "some " << 123 << " stuff" << std::flush;
std::stringstream ss2;
ss2 << ss1.rdbuf(); // copy everything inside ss1 buffer to ss2 buffer
std::cout << ss1.str() << std::endl;
std::cout << ss2.str() << std::endl;
}
Вывод:
около 123 вещей
около 123 вещей
Ответ 2
Как std::stringstream
не предоставляет конструктор копирования, вы должны построить его из выходов std::string
ss1
:
std::stringstream ss2(ss1.str());