2017-02-14 75 views
1

我想在我的代碼中公開流作爲標準等價物以消除用戶對boost::iostreams的依賴。 想要有效地做到這一點,當然如果有必要的話不需要創建副本。我想只是將std::istream的緩衝區設置爲boost::iostream::stream<boost::iostreams::source>正在使用的緩衝區,但是,這可能會導致所有權問題。 如何將boost::iostream轉換爲std::iostream等效? 特別是boost::iostream::stream<boost::iostreams::source>std::istream。需要將boost :: iostream :: stream <boost :: iostreams :: source>轉換爲std :: istream

回答

2

沒有轉換:

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

除此之外,我不認爲你可以有所有權問題,因爲std::istream不承擔所有權分配一個新的時rdbuf:

所以,你也可以自由地做:

Live On Coliru

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

打印相同

相關問題