std::basic_streambuf<CharT,Traits>::setp
protected: void setp( char_type* pbeg, char_type* pend ); |
Задаёт значения указателей, определяющих область записи.
После вызова pbase() == pbeg, pptr() == pbeg и epptr() == pend все являются true.
Если какая-либо из [pbeg, pend) не является допустимым диапазоном, поведение не определено.
Параметры
| pbeg | - | указатель на новое начало области записи |
| pend | - | указатель на новый конец области записи |
Пример
#include <array>
#include <cstddef>
#include <iostream>
// Buffer for std::ostream implemented by std::array
template<std::size_t size, class CharT = char>
struct ArrayedStreamBuffer : std::basic_streambuf<CharT>
{
using Base = std::basic_streambuf<CharT>;
using char_type = typename Base::char_type;
ArrayedStreamBuffer()
{
// put area pointers to work with “buffer”
Base::setp(buffer.data(), buffer.data() + size);
}
void print_buffer()
{
for (char_type i : buffer)
{
if (i == 0)
std::cout << "\\0";
else
std::cout << i;
std::cout << ' ';
}
std::cout << '\n';
}
private:
std::array<char_type, size> buffer{}; // value-initialize “buffer”
};
int main()
{
ArrayedStreamBuffer<10> streambuf;
std::ostream stream(&streambuf);
stream << "hello";
stream << ",";
streambuf.print_buffer();
}
Вывод:
h e l l o , \0 \0 \0 \0
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| Отчёт об ошибке | Применяется к | Опубликованное поведение | Правильное поведение |
|---|---|---|---|
| LWG 4023 | C++98 |
setp не требовал, чтобы выходная последовательность была допустимым диапазоном | требует |
См. также
| перемещает указатели начала, следующего элемента и конца входной последовательности (защищённая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_streambuf/setp