참고 : 답변을 바탕으로 편집하여보다 적절한 답변을받을 수 있습니다.반복 가능한 시퀀스를 스트림으로 처리하기 위해 std :: basic_streambuf를 확장하는 방법은 무엇입니까?
나는 지난 몇 년 동안 만든 Joop이라는 C++ 템플릿 모음을 가지고 있습니다. 이 라이브러리는 주로 "범용"범주에 속하지 않지만 다른 프로젝트에 계속 적용 할 수있는 라이브러리로 구성되어 있습니다. 따라서 대부분 Boost와 같은 다른 라이브러리에 해당 라이브러리가 없습니다.
이러한 클래스 중 하나는 seqstream
입니다. 이것은 반복 가능한 모든 시퀀스를 "문자 유형"이 시퀀스의 값 유형 인 일반 STL 류 스트림으로 취급 할 수있게한다는 아이디어입니다.
이 클래스의 이론적 근거는 두 가지입니다. 첫째, 잠재적으로 비선형이고 인접하지 않은 시퀀스를 선형적이고 연속적으로 보이게 만드는 인터페이스를 제공해야합니다. 두 번째로 스트림의 모든 객체를 마치 하나의 복잡하고 큰 문자처럼 취급해야합니다. 스트림을 시퀀스로 처리하는 표준 방법이 있습니다. 왜 다른 방법으로 스트림을 처리할까요?
현재 seqstream
은 첫 번째 요소, 마지막 요소 및 현재 요소에 대해 세 개의 반복자를 래핑합니다. seqstream
을 basic_seqbuf
으로 바꾸고 싶습니다. 표준 스트림에 연결할 수 있습니다. 아무도 이런 종류의 동작을 제공하기 위해 std::basic_streambuf
을 확장하기 시작한 리소스를 제공 할 수 있습니까? 기록 가능한 seqbuf
허용 여부
또한, 상기 seqbuf
에 객체를 기록하는 등 하지 직렬화를 목적을 수행하지만, insert()
방법에 적절한 호출을하거나 사용자 지정 삽입 반복기를 사용하는 것이 매우 인 std::back_insert_iterator
.
편집 : 여기
는 seqstream
현재 사용하는 방법의 예입니다
// Create a sequence of objects.
std::vector<std::string> sequence;
for (int i = 0; i < 10; ++i) {
std::ostringstream stream;
stream << "Element " << i << ".";
sequence.push_back(stream.str());
}
// Create a seqstream wrapping that sequence.
joop::seqstream< std::vector<std::string> > seqstream(sequence.begin(), sequence.end());
// Read the sequence like a stream.
std::string element;
while (seqstream >> element) // OR seqstream.get(element)
std::cout << element << '\n';
그것은 그것이가는 길일 수도있는 것처럼 보입니다. 그런 다음 객체 (예 :'seqstreambuf')를 표준 스트림에 연결할 수 있습니다. –
표준형 라이브러리는 스트림처럼 컨테이너를 처리하기위한 래퍼를 작성할 때까지 제한자와 같은 스트림을 처리하는 래퍼를 제공하는 경향이 있습니다. 아니면 혼란스러워. seqstream의 예제 사용법을 알려 줄 수 있습니까? –