簡體   English   中英

如何在谷物,C ++序列化庫上序列化多維數組

[英]How to serialize multidimensional array on cereal, C++ serialize library

有誰知道如何在谷物,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持有int * ,因此,當谷物去引用智能指針時,它會發現自己正在嘗試序列化原始指針,這是它不支持的。

對於特定示例,最簡單的解決方案之一是考慮使用std::vector代替帶有new的原始指針,這還可以節省您在shared_ptr中編寫自定義析構函數的工作。

如果這只是一個簡化的示例,那么如果您想讓谷物進行序列化,則必須重組代碼以不擁有擁有數據的原始指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM