2013-09-09 3 views
0

std::cout.rdbuf() настолько прост в использовании. Но я хочу напечатать строку на консоли, а также записать ее в файл.Как инкапсулировать два буфера потока

Так что я собираюсь заключить два потоковых буфера в производный класс std::streambuf и передать его rdbuf(). Это возможно?

Как это сделать?

+0

Похоже, что повышение уже предусматривает [повышение :: iostreams :: двутавровые] (http://www.boost.org/doc/libs/1_55_0/ libs/iostreams/doc/functions/tee.html) – Cubbi

+0

@Cubbi Хорошая идея. Никогда не знал об этом. – 0x499602D2

ответ

1

Я думаю, что лучшим способом сделать это было бы инкапсулировать два потока в настоящий класс потока, полученный из std::basic_ostream<...>.

Что-то для начала было бы:

template<class charT, class traits = std::char_traits<charT>> 
class basic_binary_stream : public std::basic_osteam<charT> 
{ 
    typedef std::basic_ostream<charT> stream_type; 
    typedef std::char_traits<charT> traits_type; 
    /* ... */ 
public: 
    binary_stream(stream_type& o1, stream_type& o2) 
     : s1(o1), s2(o2) 
    { } 

    binary_stream& operator<<(int n) 
    { 
     s1 << n; 
     s2 << n; 
     return *this; 
    } 

    /* ... */ 
private: 
    stream_type& s1, &s2; 
}; 

using binary_stream = basic_binary_stream<char>; 
Смежные вопросы