gpt4 book ai didi

c++ - 将 boost::iostream::stream 转换为 std::istream

转载 作者:行者123 更新时间:2023-11-30 03:34:15 26 4
gpt4 key购买 nike

我想在我的代码中将流公开为它们的标准等价物,以消除用户对 boost::iostreams 的依赖性.如果有必要,当然想有效地执行此操作而无需创建拷贝。我考虑过只设置 std::istream的缓冲区到 boost::iostream::stream<boost::iostreams::source> 正在使用的缓冲区但是,这可能会导致所有权问题。你如何转换boost::iostreamstd::iostream相等的?特别boost::iostream::stream<boost::iostreams::source>std::istream .

最佳答案

不需要转换:

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

打印相同

关于c++ - 将 boost::iostream::stream<boost::iostreams::source> 转换为 std::istream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42216721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com