며칠 전에 및 미리 읽기를 사용하는 streambuf
서브 클래스를 작성하는 것이 재미있을 것이라고 결정했습니다. 내 STL (SGI)이 filebuf
을 구현하고 basic_filebuf
에 FILE*
이 있다는 것을 깨달았습니다. 따라서 basic_filebuf
에서 물려받은 것은 문제가되지 않습니다.해당 스트림을 다시 작성하지 않고 streambuf에서 파생
그래서 나는 basic_streambuf
에서 물려 받았습니다. 그렇다면 나는 mmapbuf
을 fstream에 묶고 싶었다.
내가해야 할 일은 filebuf
의 암시 적 인터페이스를 복사하는 것이라고 생각했지만 분명히 실수였습니다. SGI에서 basic_fstream
은 basic_filebuf
을 소유합니다. basic_filestream.std::::ios::rdbuf(streambuf*)
에 전화를 건건 상관없이 파일 스트림이이를 완전히 무시하고 자신의 filebuf
을 사용합니다.
지금은 약간 혼란 스럽습니다 ... mmfstream
을 만들 수 있습니다. fstream
의 정확한 복사/붙여 넣기가 될 수 있지만 DRY 지향적이지는 않습니다.
내가 이해할 수없는 무엇이다 : 왜 fstream
그렇게 단단히은 filebuf
보다는 다른 것을 사용할 수 없습니다 그래서, filebuf
와 결합 하는가? 스트림과 버퍼를 분리하는 요점은 다른 버퍼를 가진 스트림을 사용할 수 있다는 것입니다.
솔루션 :
=>filestream
이 filebuf
의 암시 적 인터페이스에 의존해야한다. 즉, fstream은 streambuf 클래스에 의해 템플릿 화되어야합니다. 모든 사용자가 filebuf
의 암시 적 인터페이스를 구현하는 한 모든 사용자가 fstream
에 자체 streambuf 서브 클래스를 제공 할 수 있습니다. 문제 : 템플릿 매개 변수로 fstream
을 사용하는 동안 템플릿 선택기가 중단되므로 fstream
에 템플릿 매개 변수를 추가 할 수 없습니다.
=>filebuf
은 추가 속성없이 순수 가상 클래스 여야합니다. 그래서 모든 FILE * 쓰레기를 운반하지 않고도 상속받을 수 있습니다.
제목에 대한 아이디어가 있습니까?
제목에 오타가 있습니다. streambug => streambuf. 귀하의 질문에 대한 답변을 모르겠지만, 미안 해요! – chrism1
수정 됨, thanks :) – NewbiZ