더북(TheBook)

1.7.4 일반적인 스트림 개념

스트림은 화면, 키보드 및 파일에만 국한하지 않는다. 모든 클래스는 istream, ostream, iostream에서 파생할 경우* 스트림으로 사용할 수 있으며 해당 클래스의 함수에 대한 구현을 제공한다. 예를 들어 Boost.Asio는 위의 I/O에 대한 대안으로 TCP/IP 및 Boost.IOStream 스트림을 제공한다. 표준 라이브러리에는 출력 가능한 모든 타입의 문자열을 만드는데 사용할 수 있는 stringstream을 포함하고 있다. stringstream의 메소드 str()은 스트림의 내부 문자열을 반환한다.

ostream의 레퍼런스를 인수로 사용해 모든 종류의 출력 스트림을 허용하는 출력 함수를 작성할 수 있다.

#include <iostream>
#include <fstream>
#include <sstream>

void write_something(std::ostream& os) { os <<Hi stream, did you know that 3 3 =<< 3 3 << std::endl; }

int main(int argc, char* argv[]) { std::ofstream myfile(example.txt); std::stringstream mysstream;

<span class="n">write_something</span><span class="p">(</span><span class="cd2"><span class="n">std</span><span class="o">::</span><span class="n">cout</span></span><span class="p">);</span>
<span class="n">write_something</span><span class="p">(</span><span class="cd2"><span class="n">myfile</span></span><span class="p">);</span>
<span class="n">write_something</span><span class="p">(</span><span class="cd2"><span class="n">mysstream</span></span><span class="p">);</span>

<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> "<span class="n">mysstream</span> <span class="nl">is</span><span class="p">:</span> " <span class="o">&lt;&lt;</span> <span class="n">mysstream</span><span class="p">.</span><span class="n">str</span><span class="p">();</span> <span class="c1">// 개행을 포함하고 있다.</span>

}

마찬가지로 iostream을 사용해 일반적인 입력을 istream 및 읽기/쓰기 I/O로 구현할 수 있다.

 

* 클래스를 파생하는 방법은 6장에 나와 있다. std::ostream에서 출력 스트림을 파생함으로써 기술적으로 실현된다는 것을 주목하라.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.