Как сериализовать многомерный массив на зерновые, С ++ сериализовать библиотеку

Кто-нибудь знает, как сериализовать многомерный массив на зерновой, C++ библиотеки?

Я тестировал по исходному коду, показанному ниже. но жалуется

"ошибка C2338: Cereal не поддерживает сериализацию необработанных указателей - используйте умный указатель"

Как показано в коде, интеллектуальный указатель "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);

1 ответ

Вы все еще сериализуете необработанный указатель - ваш shared_ptr держит int *, поэтому, когда зерновые отправляются для разыменования умного указателя, он пытается сериализовать необработанный указатель, который он не поддерживает.

Одним из самых простых решений для вашего конкретного примера было бы рассмотреть возможность использования std::vector вместо необработанного указателя с новым, что также избавит вас от необходимости написания этого деструктора в вашем shared_ptr,

Если это всего лишь сокращенный пример, вам придется реструктурировать свой код, чтобы не иметь необработанных указателей, владеющих данными, если вы хотите, чтобы зерновые преобразовали их в сериализацию.

Другие вопросы по тегам