微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 basic_ofstream 写入字节数据序列

如何解决使用 basic_ofstream 写入字节数据序列

我有一个 info_list 类型的变量,我想迭代它并将数据以二进制格式按顺序保存到文件中。这是我尝试过的:

std::list<std::pair<std::size_t,std::byte*>>

void write_data() { std::basic_ofstream<std::byte> file("data.bin",std::ios::binary); for (decltype(auto) info : info_list) { file.write(info.second,info.first); } } firststd::pair 指针指向的数据大小。

我不擅长这些 C++ 流。文件被保存为空。我做错了什么?

我想避免使用 C 特性来实现这一点。

编辑:

我尝试使用 second 而不是 std::ofstream 并且它起作用了...为什么 std::basic_ofstream<std::byte> 在这里不起作用?我错过了什么吗?

解决方法

以下是您所缺少的:使用 std::basic_ofstream<std::byte> 时,您实际上是在实例化 std::basic_ofstream<std::byte,std::char_traits<std::byte>>

问题在于 std::char_traits,因为标准特化(行为定义明确的类型)是:

std::char_traits<char>
std::char_traits<wchar_t>
std::char_traits<char16_t>
std::char_traits<char32_t>
std::char_traits<char8_t>

与使用标准库中定义的特化(即 std::ofstream)的 std::char_traits<char> 不同,您的代码使用 std::char_traits<std::byte>。要继续进行这样的实现,您必须provide the missing specialization

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。