0

有谁知道如何在谷物、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);
4

1 回答 1

1

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

对于您的特定示例,最简单的解决方案之一是考虑使用std::vectornew 代替原始指针,这也将节省您在shared_ptr.

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

于 2018-03-12T03:17:49.620 回答