如何序列化谷物上的多维数组,C++ 序列化库
Posted
技术标签:
【中文标题】如何序列化谷物上的多维数组,C++ 序列化库【英文标题】:How to serialize multidimensional array on cereal, C++ serialize library 【发布时间】:2017-12-13 09:48:29 【问题描述】:有人知道如何序列化谷物、C++ 库上的多维数组吗?
我通过如下所示的源代码进行了测试。 但是,它抱怨
“错误C2338:谷物不支持序列化 原始指针 - 请使用智能指针"
如代码所示,智能指针“shared_ptr”已被使用。
错在哪里?
const int square_size = 3;
int** a = new int*[square_size];
for (int i = 0; i < square_size; i++)
a[i] = new int[square_size];
std::shared_ptr<int*> sp(a, [](int** a) for (int i = 0;i < square_size;i++) delete a[i]; );
std::ofstream ofs("output.cereal", std::ios::binary);
cereal::BinaryOutputArchive archive(ofs);
archive(sp);
【问题讨论】:
shared_ptr应该在创建a的同时创建。 【参考方案1】:您仍在序列化原始指针 - 您的 shared_ptr
持有 int *
,因此当谷物去取消引用智能指针时,它发现自己试图序列化原始指针,这不是它所支持的。
对于您的特定示例,最简单的解决方案之一是考虑使用 std::vector
代替带有 new 的原始指针,这也将节省您在 shared_ptr
中编写自定义析构函数的工作。
如果这只是一个简化的示例,如果您希望谷物序列化它,则必须重组代码以不让原始指针拥有数据。
【讨论】:
以上是关于如何序列化谷物上的多维数组,C++ 序列化库的主要内容,如果未能解决你的问题,请参考以下文章