더북(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;

    write_something(std::cout);
    write_something(myfile);
    write_something(mysstream);

    std::cout << "mysstream is: " << mysstream.str(); // 개행을 포함하고 있다.
}

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

 

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

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