如何序列化谷物上的多维数组,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++ 序列化库的主要内容,如果未能解决你的问题,请参考以下文章

使用 ProtoBuf-Net,如何(反)序列化多维数组?

如何将多维数组添加到序列化的 POST 数据中?

如何防止 JsonWriter 在序列化多维数组时添加太多换行符?

堆上的 C++ 多维数组

使用Jettison的多维数组

如何使用具有多维序列到序列的 PyTorch Transformer?