将 boost`s bufferstream 转换为 istream

Posted

技术标签:

【中文标题】将 boost`s bufferstream 转换为 istream【英文标题】:Convert boost`s bufferstream to istream 【发布时间】:2018-02-20 09:53:06 【问题描述】:

是否可以?我正在尝试进行转换,但是我仍然不清楚我是否做错了什么,或者根本不可能做到这一点。我会很感激任何答案。

char *copy = static_cast <char*> (region.get_address());
for (int i = 0;i < length;i++) copy[i] = str[i];
bufferstream input_stream (copy, length);

然后我需要将 bufferstream 转换为 istream。 基本上,我需要将 bufferstream 实例作为参数传递给接受 istream & 的函数。

【问题讨论】:

我们更不清楚,因为您没有显示您的代码。请提供minimal reproducible example "我正在尝试进行转换,但我仍然不清楚我是否做错了什么" 从我们的角度来看 - 你没有尝试任何东西,因为你没有尝试解决问题。 谢谢,我编辑了我的问题。 【参考方案1】:

不清楚您想要达到什么¹,这是我的最佳猜测:

Live² On Coliru

#include <boost/interprocess/mapped_region.hpp>
#include <boost/interprocess/shared_memory_object.hpp>
#include <boost/interprocess/streams/bufferstream.hpp>
#include <iostream>

namespace bip = boost::interprocess;

int main() 
    bip::shared_memory_object smo(bip::open_or_create, "MySharedMemory", bip::read_write);

    std::string str = "test data";
    smo.truncate(10ull << 10); // 10 KiB
    bip::mapped_region r(smo, bip::read_write);

    bip::bufferstream stream(reinterpret_cast<char*>(r.get_address()), r.get_size());

    if (stream << str)
        std::cout << "Written";


¹https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem

² Coliru 不支持共享内存

【讨论】:

以上是关于将 boost`s bufferstream 转换为 istream的主要内容,如果未能解决你的问题,请参考以下文章

如何将 boost::hana::tuple 转换为 std::variant

如何将 std::string 转换为 boost::chrono::nanoseconds

如何:将 boost::endian 缓冲区类型转换回本机格式

如何将字节数组转换为 boost::multiprecision::uint128_t?

使用 Boost.Python 将 Python 转换为 C++ 函数

将缓冲区转换为字符串 C++ boost