stringstream-> gd; rdbuf () -> gt; pubsetbuf не устанавливает буфер

Я пытаюсь изменить stringbuffer объекта stringstream без необходимости копировать строку, используя метод pubsetbuf, но он не работает. Я слежу за документацией в http://www.cplusplus.com/reference/iostream/streambuf/pubsetbuf/. Вот мой пример кода:

#include <iostream>
#include <sstream>

int main(int argc, char* argv[])
{
std::stringstream stream("You say goodbye");
char replace[] = {"And I say hello"};
std::cout << stream.str() << std::endl; // Checking original contents
stream.rdbuf()->pubsetbuf(replace, 16); // Should set contents here
std::cout << stream.str() << std::endl; // But don't :(
return 0;
}

И вывод:

You say goodbye
You say goodbye

Я знаю, что могу использовать stream.str (replace), но этот метод копирует значение ‘replace’, и я не хочу делать копию.

Что мне не хватает?

Обновление: я использую VS2010

8

Решение

Не следует устанавливать содержимое. pubsetbuf звонки virtual setbuf

basic_streambuf<charT,traits>* setbuf(charT* s, streamsize n);


15 Эффекты: определяется реализацией, за исключением того, что setbuf (0,0) не имеет эффекта.

16 Возвращает: это.

VS 2010. Нет перегрузки виртуального метода setbuf в basic_stringbuf, он использует по умолчанию от basic_streambuf

virtual _Myt *__CLR_OR_THIS_CALL setbuf(_Elem *, streamsize)
{   // offer buffer to external agent (do nothing)
return (this);
}
11

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]