【问题标题】:How to serialize multidimensional array on cereal, C++ serialize library如何序列化谷物上的多维数组,C++ 序列化库
【发布时间】: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的同时创建。

标签: c++ visual-studio c++11 multidimensional-array cereal


【解决方案1】:

您仍在序列化原始指针 - 您的 shared_ptr 持有 int *,因此当谷物去取消引用智能指针时,它发现自己试图序列化原始指针,这不是它所支持的。

对于您的特定示例,最简单的解决方案之一是考虑使用 std::vector 代替带有 new 的原始指针,这也将节省您在 shared_ptr 中编写自定义析构函数的工作。

如果这只是一个简化的示例,如果您希望谷物序列化它,则必须重组代码以不让原始指针拥有数据。

【讨论】:

    猜你喜欢
    • 2019-01-05
    • 2018-03-12
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 2015-08-05
    • 2016-09-15
    相关资源
    最近更新 更多