Во IIRC вся причина, по которой существует stringstream (против strstream), заключалась в том, чтобы разобраться в нечетких вопросах владения памятью, которые возникли бы путем предоставления прямого доступа к буферу.например, я думаю, что это изменение должно было специально предотвратить то, что вы просите сделать.
Так или иначе, я думаю, вам придется сделать это самостоятельно, переопределив буфер потока.Чтобы ответить на аналогичный вопрос, я предложил что-то для входных потоков , которое получило довольно много голосов.Но, честно говоря, я не знал, о чем говорил, ни сейчас, когда я предлагал следующее:
Взлом этой ссылки из Интернета для создания "буфера потока верхнего регистра" длятот, который просто повторяет и дает ссылку на свой буфер, может дать:
#include <iostream>
#include <streambuf>
class outbuf : public std::streambuf {
std::string data;
protected:
virtual int_type overflow (int_type c) {
if (c != EOF)
data.push_back(c);
return c;
}
public:
std::string& get_contents() { return data; }
};
int main() {
outbuf ob;
std::ostream out(&ob);
out << "some stuff";
std::string& data = ob.get_contents();
std::cout << data;
return 0;
}
Я уверен, что он сломан во всех отношениях.Но верхний регистр-буфер-авторы, похоже, думали, что переопределение только одного метода overflow () позволило бы им прописать весь вывод в поток, так что я думаю, можно утверждать, что достаточно увидеть все выходные данные при записи в собственный буфер.
Но даже в этом случае переход по одному символу за раз кажется неоптимальным ... и кто знает, какие накладные расходы вы получаете, в первую очередь, от наследования от streambuf. Проконсультируйтесь с вашим ближайшим экспертом по C ++ iostream, чтобы узнать, каков правильный правильный путь. Но, надеюсь, это доказательство того, что что-то подобное возможно.