2017-07-02 10 views
0

De l'boost iostreams tutorial j'ai lu qu'il est possible d'utiliser stream_buffer boost avec std :: ostream, comme indiqué dans le tutoriel:Utiliser boost stream_buffer avec std :: ofstream

#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 
} 

Comment peut-on utiliser boost stream_buffer créer std :: ofstream? J'ai implémenté un périphérique de récepteur personnalisé que je peux utiliser pour créer un boost stream_buffer. Avec le tampon de flux, je suis capable de créer std :: ostream, mais pas 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 
// ... 

Je avais besoin parce que une autre bibliothèque que j'utilise nécessite std :: ofstream &. Mais malheureusement, le passage du boost stream_buffer au constructeur std :: ofstream ne se compile pas. Des solutions de contournement possibles?

+0

Non, il n'y a pas de solution de contournement. – noxmetus

+0

@noxmetus Vous allez être surpris alors. –

Répondre

1

Ce que vous pouvez faire est de créer un std::ofstream en utilisant son constructeur par défaut et puis attribuez-lui votre tampon à elle:

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

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

Merci, c'est exactement ce que je cherchais! – Aryan

+0

La syntaxe préférable serait "out.std :: ostream :: rdbuf (& mybuf)", sans static_cast. Toutefois. C'est une blague? Tu ne peux pas être sérieux. Ou vous ne voyez pas de problème ici, n'est-ce pas? Essayez de répondre par exemple: que se passera-t-il si j'écris "std :: ofstream ofs = std :: move (out);". Un indice: std :: basic_ofstream std :: basic_filebuf et y accède directement. – noxmetus

+0

@noxmetus Quelles fonctions 'ofstream' accèdent directement au tampon? –