Я пытаюсь реализовать буфер потока, и у меня возникают проблемы с выполнением работы overflow()
. Я изменяю размер буфера еще на 10 символов и сбрасываю буфер с помощью setp
. Затем я увеличиваю указатель назад, где мы остановились. По какой-то причине выход не прав:Что случилось с моей реализацией overflow()?
template <class charT, class traits = std::char_traits<charT>>
class stringbuf : public std::basic_stringbuf<charT, traits>
{
public:
using char_type = charT;
using traits_type = traits;
using int_type = typename traits::int_type;
public:
stringbuf()
: buffer(10, 0)
{
this->setp(&buffer.front(), &buffer.back());
}
int_type overflow(int_type c = traits::eof())
{
if (traits::eq_int_type(c, traits::eof()))
return traits::not_eof(c);
std::ptrdiff_t diff = this->pptr() - this->pbase();
buffer.resize(buffer.size() + 10);
this->setp(&buffer.front(), &buffer.back());
this->pbump(diff);
return traits::not_eof(traits::to_int_type(*this->pptr()));
}
// ...
std::basic_string<charT> str()
{
return buffer;
}
private:
std::basic_string<charT> buffer;
};
int main()
{
stringbuf<char> buf;
std::ostream os(&buf);
os << "hello world how are you?";
std::cout << buf.str();
}
При печати строки она выходит как:
привет Worl как же НУ?
Не хватает d
и y
. Что я сделал не так?