2009-06-16 4 views
12

Библиотека подталкивания C++ имеет Function Template teeC++ «привет мир» Повысьте тройник пример программы

шаблонов классов tee_filter и tee_device обеспечивают два способа расколоть выходную последовательность таким образом, что все данные направляются одновременно двух разных местах ,

Я ищу полный пример C++ с использованием Boost tee для вывода на стандартный выход и в файл типа sample.txt.

+0

Что вы подразумеваете под импульс тройник? – stefanB

+0

tee является одной из библиотек в boost –

+0

Любые ссылки? Я не могу найти ничего связанного .. может быть, это просто меня – stefanB

ответ

26

Основываясь на помощь от вопроса Джон связаны:

#include <boost/iostreams/tee.hpp> 
#include <boost/iostreams/stream.hpp> 
#include <fstream> 
#include <iostream> 

using std::ostream; 
using std::ofstream; 
using std::cout; 

namespace bio = boost::iostreams; 
using bio::tee_device; 
using bio::stream; 

int main() 
{ 
    typedef tee_device<ostream, ofstream> TeeDevice; 
    typedef stream<TeeDevice> TeeStream; 
    ofstream ofs("sample.txt"); 
    TeeDevice my_tee(cout, ofs); 
    TeeStream my_split(my_tee); 
    my_split << "Hello, World!\n"; 
    my_split.flush(); 
    my_split.close(); 
} 
+0

Thanks Matthew; хороший. –

+0

Спасибо, cwhii. Готово. –

0

Вот пример использования tee_filter настоящее время я использую, чтобы тройник мой выход Boost.Test:

{ // init code, use static streams to keep them alive until test run process end 

    using namespace boost::iostreams; 
    static ofstream ofs("boost_test_output.log.xml"); // log file 
    static tee_filter<ostream> fileFilt(ofs); // tee all passed data to logfile 

    // note derives from `boost::iostreams::output_filter` 
    static text_xml_readability_filter xmlFilt; // filter all passed data, making the XML output readable 

    static filtering_ostream filter; // master filter 

    filter.push(fileFilt); // 1st, tee off any data to the file (raw boost XML) 
    filter.push(xmlFilt); // 2nd make the xml data stream readable (linebreaks, etc.) 
    filter.push(cout);  // 3rd output the readable XML to cout 

    boost::unit_test::unit_test_log.set_stream(filter); 
} 
Смежные вопросы