Подтвердить что ты не робот

Как скопировать из одного объекта 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:: Распределитель > &.)

4b9b3361

Ответ 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());