내 자신의 타조/스트림 부프를 어떻게 만들려면?
문제
교육 목적으로 타조와 스트림 버퍼를 만들고 싶습니다.
- << myvar;
- std : cout 또는 파일에 쓰는 대신 Deque 컨테이너에 보관하십시오.
- 내가 몇 번이나했는지, <<, 몇 번이나 white를했는지, 내가 쓴 바이트의 양, 그리고 몇 번 플러시 ()와 같은 추가 데이터를 기록합니다. 그러나 나는 모든 정보가 필요하지 않습니다.
나는 과부하를 시도했지만 끔찍하게 실패했습니다. 나는 일을하여 글쓰기를 과부하 시키려고 시도했다
ostream& write( const char* s, streamsize n )
my basic_stringstream2 클래스 (cpp 파일에 페이스트 페이스트를 복사하여 수정 됨)에서 코드는 Basic_ostream을 사용하여 유지했습니다. 코드를 살펴 보았는데 xsputn을 과부하해야 할 것 같습니다 (이 페이지에서는 언급되지 않습니다. http://www.cplusplus.com/reference/iostream/ostream )하지만 과부하가 필요한 것은 무엇입니까? 그리고 수업을 어떻게 구성합니까 (상속하는 데 필요한 것은 무엇입니까?)
해결책
표준 접근법은 자신의 스트림 부프를 정의하는 데 있습니다. 당신은 다음을 살펴 봐야합니다.
- Angelika Langer의 기사 ioStreams 파생에서
- 제임스 칸 제의 기사 스트림 부프를 필터링합니다
- boost.iostream 응용 프로그램의 예
다른 팁
A+C의 경우) 패싯을보아야한다고 생각하면 객체가 문자로 작성되는 방식을 수정합니다. 객체를 몇 번 스트리밍했는지에 대한 통계를 여기에 저장할 수 있습니다. 체크 아웃 STL 스트림을 사용할 때 내 객체를 포맷하는 방법은 무엇입니까? 예를 들어.
b) 자신의 streamBuf를 만들고 타조를 해당 버퍼 (생성자 인수)에 연결해야합니다. 보다 Luc의 링크 + 새로운 StreamBuf 클래스를 도출합니다. 한마디로 타조 (최소) 용으로 이것을 구현해야합니다.
나는 당신이하고 싶은 것이 가능하다는 것을 확신하지 못합니다. 그만큼 <<
운영자는 가상이 아닙니다. 그래서 당신은 정의 할 수 있습니다 yourstream &operator << (yourstream &strm, int i)
Endian 변환 및 계산으로 원하는 작업을 수행하려면 코드가 직접 호출 할 때 작동합니다. 그러나 당신이 당신의 스트림 객체를 타조를 기대하는 함수로 전달하면, 그 기능은 호출 할 때마다 <<
, 그것은 당신 대신 원래 타조 버전으로 이동합니다.
내가 이해하는 것처럼, 스트림 시설은 다른 종류의 버퍼 (예 : 숯의 deque)를 사용하는 새로운 스트림 유형을 "쉽게"정의 할 수 있도록 설정되었으며, 지원을 매우 쉽게 추가 할 수 있습니다. 자신의 클래스를 통해 출력 <<
. 나는 당신이 그것들 사이의 중간 층을 재정의 할 수 있다고 생각하지 않습니다.
그리고 특히,의 전체 요점 <<
인터페이스는 멋지게 형식화 된 텍스트 출력을 제공하는 반면 실제로 이진 출력을 원하는 것처럼 들립니다. (그렇지 않으면 "엔디언"에 대한 언급은 의미가 없습니다.) 내가 알지 못하는 방법이 있다고 가정하더라도 최선을 다해 이진 출력을 생성 할 것입니다. 예를 들어, 최종 사용자 오버로드를 고려하여 3D 공간에서 포인트를 출력하십시오. 최종 사용자 버전 <<
아마도 같은 일을 할 것입니다 << '(' << x << ", " << y << ", " << z << ')'
. 텍스트 스트림에서는 멋지게 보이지만 이진 스트림에서 낭비되고 완전히 쓸모없는 문자가 많습니다. << x << y << z
. (그리고 얼마나 많은 전화 <<
그것들은 계산해야합니까?)