Редактировать: Название вопроса было основано на глубоком непонимании ошибки компилятора, которую я получил. Я (глупо) предположил, что ошибка заключалась в том, что я пытался десериализовать объект, который я объявил внутри функции. Это было совершенно неправильно. Я сам не предпринимал достаточных усилий по отладке, иначе я мог бы выяснить, что не так. Так что название было довольно вводящим в заблуждение, и я изменил его. Спасибо Андрею Беньковскому за помощь.
Я пишу функции сериализации для 3D-моделей в своем движке, используя хлопья, которые оказались действительно эффективными и простыми в использовании. До сих пор все работало отлично, когда я тестировал (де-) сериализацию простой сетки. Но теперь я пытаюсь десериализовать другой класс, но столкнулся с проблемой, которую не понимаю.
void loadFile(std::string filepath)
{
DescriptionFile file;
{
ifstream stream = ifstream(filepath, std::ifstream::binary);
PortableBinaryInputArchive archive(stream);
archive(file);
stream.close();
}
}
Это мой класс, который нужно десериализовать:
struct DescriptionFile
{
public:
DescriptionFile(){}
map<string, MeshDescription*> meshDescriptions;
map<string, ModelDescription*> modelDescriptions;
public:
template<class Archive>
void serialize(Archive & archive)
{
archive(meshDescriptions, modelDescriptions);
}
};
Это дает мне ошибку компилятора: Cereal не поддерживает сериализацию необработанных указателей - используйте умный указатель, даже если это не указатель. В другой части кода что-то подобное работает просто отлично. Я был бы рад, если бы кто-нибудь помог мне решить эту проблему.
filepath
этоstd::string
? Пожалуйста, отредактируйте свой вопрос, чтобы указать тип. - person Андрей Беньковский   schedule 26.10.2015