문제

교육 목적으로 타조와 스트림 버퍼를 만들고 싶습니다.

  1. << myvar;
  2. std : cout 또는 파일에 쓰는 대신 Deque 컨테이너에 보관하십시오.
  3. 내가 몇 번이나했는지, <<, 몇 번이나 white를했는지, 내가 쓴 바이트의 양, 그리고 몇 번 플러시 ()와 같은 추가 데이터를 기록합니다. 그러나 나는 모든 정보가 필요하지 않습니다.

나는 과부하를 시도했지만 끔찍하게 실패했습니다. 나는 일을하여 글쓰기를 과부하 시키려고 시도했다

ostream& write( const char* s, streamsize n ) 

my basic_stringstream2 클래스 (cpp 파일에 페이스트 페이스트를 복사하여 수정 됨)에서 코드는 Basic_ostream을 사용하여 유지했습니다. 코드를 살펴 보았는데 xsputn을 과부하해야 할 것 같습니다 (이 페이지에서는 언급되지 않습니다. http://www.cplusplus.com/reference/iostream/ostream )하지만 과부하가 필요한 것은 무엇입니까? 그리고 수업을 어떻게 구성합니까 (상속하는 데 필요한 것은 무엇입니까?)

도움이 되었습니까?

해결책

표준 접근법은 자신의 스트림 부프를 정의하는 데 있습니다. 당신은 다음을 살펴 봐야합니다.

다른 팁

A+C의 경우) 패싯을보아야한다고 생각하면 객체가 문자로 작성되는 방식을 수정합니다. 객체를 몇 번 스트리밍했는지에 대한 통계를 여기에 저장할 수 있습니다. 체크 아웃 STL 스트림을 사용할 때 내 객체를 포맷하는 방법은 무엇입니까? 예를 들어.

b) 자신의 streamBuf를 만들고 타조를 해당 버퍼 (생성자 인수)에 연결해야합니다. 보다 Luc의 링크 + 새로운 StreamBuf 클래스를 도출합니다. 한마디로 타조 (최소) 용으로 이것을 구현해야합니다.

  • 오버플로 (단일 숯 또는 플러시 버퍼를 넣음) (링크)
  • XSPUTN (char 배열을 버퍼에 넣음) (링크)
  • 동기화 (링크)

나는 당신이하고 싶은 것이 가능하다는 것을 확신하지 못합니다. 그만큼 << 운영자는 가상이 아닙니다. 그래서 당신은 정의 할 수 있습니다 yourstream &operator << (yourstream &strm, int i) Endian 변환 및 계산으로 원하는 작업을 수행하려면 코드가 직접 호출 할 때 작동합니다. 그러나 당신이 당신의 스트림 객체를 타조를 기대하는 함수로 전달하면, 그 기능은 호출 할 때마다 <<, 그것은 당신 대신 원래 타조 버전으로 이동합니다.

내가 이해하는 것처럼, 스트림 시설은 다른 종류의 버퍼 (예 : 숯의 deque)를 사용하는 새로운 스트림 유형을 "쉽게"정의 할 수 있도록 설정되었으며, 지원을 매우 쉽게 추가 할 수 있습니다. 자신의 클래스를 통해 출력 <<. 나는 당신이 그것들 사이의 중간 층을 재정의 할 수 있다고 생각하지 않습니다.

그리고 특히,의 전체 요점 << 인터페이스는 멋지게 형식화 된 텍스트 출력을 제공하는 반면 실제로 이진 출력을 원하는 것처럼 들립니다. (그렇지 않으면 "엔디언"에 대한 언급은 의미가 없습니다.) 내가 알지 못하는 방법이 있다고 가정하더라도 최선을 다해 이진 출력을 생성 할 것입니다. 예를 들어, 최종 사용자 오버로드를 고려하여 3D 공간에서 포인트를 출력하십시오. 최종 사용자 버전 << 아마도 같은 일을 할 것입니다 << '(' << x << ", " << y << ", " << z << ')'. 텍스트 스트림에서는 멋지게 보이지만 이진 스트림에서 낭비되고 완전히 쓸모없는 문자가 많습니다. << x << y << z. (그리고 얼마나 많은 전화 << 그것들은 계산해야합니까?)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top