BoostC++ライブラリには関数テンプレートティーがあります
クラステンプレートtee_filterとtee_deviceは、すべてのデータが2つの異なる場所に同時に送信されるように、出力シーケンスを分割する2つの方法を提供します。
Boostteeを使用して標準出力および「sample.txt」のようなファイルに出力する完全なC++の例を探しています。
BoostC++ライブラリには関数テンプレートティーがあります
クラステンプレートtee_filterとtee_deviceは、すべてのデータが2つの異なる場所に同時に送信されるように、出力シーケンスを分割する2つの方法を提供します。
Boostteeを使用して標準出力および「sample.txt」のようなファイルに出力する完全なC++の例を探しています。
ジョンがリンクした質問の助けに基づいて:
#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();
}
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 );
}