2017-02-14 6 views
1

Ich möchte streams in meinem Code als ihre Standardäquivalente offenlegen, um die Benutzerabhängigkeit von boost::iostreams zu eliminieren. Möchten Sie dies natürlich effizient tun, ohne eine Kopie zu erstellen, falls erforderlich. Ich dachte darüber nach, nur den std::istream Puffer auf den zu setzen, der von verwendet wird, dies könnte jedoch Besitzprobleme verursachen. Wie konvertiert man boost::iostream in std::iostream? Insbesondere boost::iostream::stream<boost::iostreams::source> bis std::istream.convert boost :: iostream :: stream <boost :: iostreams :: source> zu std :: istream

Antwort

2

keine Konvertierung erforderlich:

Live On Coliru

#include <iostream> 
#include <boost/iostreams/stream.hpp> 
#include <boost/iostreams/device/array.hpp> 

namespace io = boost::iostreams; 

void foo(std::istream& is) { 
    std::string line; 
    while (getline(is, line)) { 
     std::cout << " * '" << line << "'\n"; 
    } 
} 

int main() { 
    char buf[] = "hello world\nbye world"; 
    io::array_source source(buf, strlen(buf)); 
    io::stream<io::array_source> is(source); 

    foo(is); 
} 

Andere, als dass ich glaube nicht, Sie Eigentumsfragen haben könnte, da std::istream nicht Besitz übernimmt, wenn eine neue zugewiesen rdbuf:

Sie sind also auch frei, zu tun:

Live On Coliru

std::istream wrap(is.rdbuf()); 
foo(wrap); 

Drucken der gleichen

Verwandte Themen