Namespaces
Variants

std::basic_streambuf<CharT,Traits>:: setp

From cppreference.net
protected :
void setp ( char_type * pbeg, char_type * pend ) ;

put 영역을 정의하는 포인터들의 값을 설정합니다.

호출 후에, pbase ( ) == pbeg , pptr ( ) == pbeg 그리고 epptr ( ) == pend 가 모두 true 입니다.

만약 [ pbeg , pend ) 중 어느 하나라도 유효한 범위 가 아닐 경우, 동작은 정의되지 않습니다.

목차

매개변수

pbeg - put 영역의 새로운 시작을 가리키는 포인터
pend - put 영역의 새로운 끝을 가리키는 포인터

예제

#include <array>
#include <cstddef>
#include <iostream>
// std::array로 구현된 std::ostream용 버퍼
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()
    {
        // "buffer"와 작업하기 위한 put 영역 포인터 설정
        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{}; // "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++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 4023 C++98 setp 가 출력 시퀀스가 유효한 범위일 것을 요구하지 않았음 요구함

참고 항목

입력 시퀀스의 시작, 다음, 끝 포인터를 재배치합니다
(protected member function)