2010-05-03 2 views
0

어떻게 새 char 배열을 fstream의 filebuf의 버퍼로 설정할 수 있습니까? filebuf에는 함수 (setbuf)가 있지만 보호되어 있습니다. 웹에서 검색하는 동안 일부 사이트는 fstream :: setbuf를 언급하지만 더 이상 존재하지 않는 것 같습니다.ifstream 및 ofstream의 filebuf

감사

답변

0

보호 된 멤버 함수의 요점은이 파생 된 서브 클래스에 의해 오버라이드 (override) 할 수 의미하는 것입니다. 다음은 libstdC++ 매뉴얼의 짧은 부분입니다. discusses exactly that.

// [27.5.2.4.2] buffer management and positioning 
    /** 
    * @brief Manipulates the buffer. 
    * 
    * Each derived class provides its own appropriate behavior. See 
    * the next-to-last paragraph of 
    * http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt11ch25s02.html 
    * for more on this function. 
    * 
    * @note Base class version does nothing, returns @c this. 
    */ 
    virtual basic_streambuf<char_type,_Traits>* 
    setbuf(char_type*, streamsize) 
    { return this; } 
+0

나는 보호 된 회원들의 요점을 이해하지만 실제로 그 질문의 목적은 아니었다. 감사합니다. 어쨌든 – raygozag

+0

질문의 목적은 무엇입니까? 기능이 "더 이상 존재하지 않는 것"인지 여부 그건 틀렸어, 내가 챕터와 절을 인용 한 표준 ISO/IEC 14882 : 1998 (E)의 일부이다. – msw

+0

http://www.open-std.org/jtc1/sc22/open/n2356/lib-iostreams.html#lib.streambuf.virt.buffer – msw

1

streambuf의 상기 퍼블릭 메소드 가상 아닌 템플릿 메소드 패턴을 이용하여 정의 할 수 있도록 설계되고, 서브 클래스의 동작에 의한을 정의 : 다음 코드의 동일한 지점을 만드는 <streambuf> 발췌이기

비공개 가상 메소드 구현.

손에있는 경우 setbuf를 호출하는 public 메소드의 이름은 pubsetbuf입니다.

그러나 basicbuf의 basic_filebuf 구현은 다소 느슨하게 지정됩니다. 유일한 보증은 setbuf (0, 0)가 스트림을 버퍼링하지 않도록한다는 것입니다. 다른 경우에는 효과가 구현에 따라 정의됩니다.

관련 문제