우선, 나는 주관적인 의견을 요구하는 것처럼 보일 수 있지만, 그것은 내가 따르는 것이 아닙니다. 이 주제에 대한 근거가있는 몇 가지 주장을 듣고 싶습니다.
최신 스트림 / 직렬화 프레임 워크를 어떻게 설계해야하는지에 대한 통찰력을 얻기 위해 최근 Angelika Langer와 Klaus Kreft의 Standard C ++ IOStreams and Locales 라는 책을 받았습니다 . IOStreams가 제대로 설계되지 않았다면 처음에는 C ++ 표준 라이브러리로 만들지 않았을 것이라고 생각했습니다.
이 책의 여러 부분을 읽은 후 IOStreams가 전체 아키텍처 관점에서 STL과 비교할 수 있는지 의심됩니다. 예를 들어 Alexander Stepanov (STL의 "발명자")와의 인터뷰에서 STL 에 적용되는 일부 디자인 결정에 대해 알아보십시오.
특히 나를 놀라게하는 것 :
IOStreams의 전체 디자인을 담당 한 사람은 누구인지 알 수없는 것 같습니다. 이에 대한 배경 정보를 읽고 싶습니다. 누구나 좋은 리소스를 알고 있습니까?
당신이 당신의 자신의 클래스와 IOSTREAMS를 확장 할 경우 예를 들어 IOSTREAMS의 즉각적인 표면 아래에 탐구하면, 당신은 상당히 애매하고 혼란 멤버 함수 이름, 예를 들어이와 인터페이스에 도착
getloc
/imbue
,uflow
/underflow
,snextc
/sbumpc
/sgetc
/sgetn
,pbase
/pptr
/epptr
(그리고있다 아마도 더 나쁜 예). 이로 인해 전체 설계와 단일 부품의 작동 방식을 이해하기가 훨씬 어려워집니다. 위에서 언급 한 책조차 그다지 도움 이 되지 않습니다 (IMHO).
따라서 내 질문 :
당신은 (실제로이 경우 오늘날의 소프트웨어 엔지니어링 기준으로 판단해야한다면 입니다 다음에 어떤 일반 협정), C ++의 여전히 잘 디자인 된 것으로 간주 할 수 IOSTREAMS 것인가? (저는 일반적으로 구식이라고 여겨지는 것에서 소프트웨어 디자인 기술을 향상시키고 싶지 않습니다.)
std::streambuf
바이트를 읽고 쓰는 데 사용되는 기본 클래스이며 istream
/ ostream
는 std::streambuf
대상 / 소스로 포인터를 가져 와서 형식화 된 입 / 출력을위한 것 입니다.
ostream foo(&somebuffer); foo << "huh"; foo.rdbuf(cout.rdbuf()); foo << "see me!";