【问题标题】:C++ "hello world" Boost tee example programC++ "hello world" Boost tee 示例程序
【发布时间】:2009-06-16 00:29:47
【问题描述】:

Boost C++ 库有Function Template tee

类模板 tee_filter 和 tee_device 提供了两种分割输出序列的方法 以便所有数据同时定向到两个不同的位置。

我正在寻找一个完整的 C++ 示例,它使用 Boost tee 输出到标准输出和类似“sample.txt”的文件。

【问题讨论】:

标签: c++ boost-iostreams


【解决方案1】:

基于约翰链接的问题的帮助:

#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();
}

【讨论】:

    【解决方案2】:

    这是一个使用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 );
    }
    

    【讨论】:

      猜你喜欢
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-17
      相关资源
      最近更新 更多