使用boost stream_buffer和std :: ofstream

时间:2017-07-02 15:38:12

标签: c++ boost stl ofstream ostream

boost iostreams tutorial我已经读过,可以将boost stream_buffer与std :: ostream一起使用,如教程所示:

#include <ostream>
#include <boost/iostreams/device/file.hpp>
#include <boost/iostreams/stream.hpp>

namespace io = boost::iostreams;

int main()
{
    io::stream_buffer<io::file_sink> buf("log.txt");
    std::ostream                     out(&buf);
    // out writes to log.txt
}

我们如何使用boost stream_buffer来创建std :: ofstream?我已经实现了一个自定义接收设备,我可以用它来创建一个boost stream_buffer。使用流缓冲区,我可以创建std :: ostream,但不能创建std :: ofstream。

// ...
io::stream_buffer<my_custom_file_sink> mybuf("myfile.txt"); // Creating stream_buffer works
std::ostream out(&mybuf); // Here I would like to use std::ofstream
// ...

我需要这个,因为我使用的另一个库需要std :: ofstream&amp ;.但不幸的是,将boost stream_uffer传递给std :: ofstream构造函数不会编译。任何可能的解决方法?

1 个答案:

答案 0 :(得分:1)

您可以使用其默认构造函数创建std::ofstream,然后将缓冲区分配给它:

io::stream_buffer<my_custom_file_sink> mybuf("myfile.txt");

std::ofstream out;
out.std::ostream::rdbuf(&mybuf); // Call the base class version.