Большое спасибо за ваше время, я очень ценю это
Существует шаблонный подкласс, который необходимо сериализовать с помощью библиотеки сериализации зерновых, базовый класс пуст, он существует только для того, чтобы мы могли иметь вектор shared_ptr для базового класса, что позволяет ему содержать несколько типов шаблонного подкласса, эффективно позволяя вектор хранение нескольких типов переменных.
class NetVar_ {};
template <class VARTYPE> class NetVar : public NetVar_
{
public:
NetVar(VARTYPE Value)
{
Var = Value;
}
template <class Archive> void serialize(Archive & archive)
{
archive(Var);
}
private:
VARTYPE Var;
};
Следующий вектор базового класса помещается в несколько подклассов:
std::vector<std::shared_ptr<NetVar_>> PacketData;
PacketData.push_back(std::make_shared<NetVar<int>>(32));
PacketData.push_back(std::make_shared<NetVar<int>>(32));
PacketData.push_back(std::make_shared<NetVar<std::string>>('test'));
Наконец, вектор сериализуется и отправляется на удаленную машину для обработки:
std::ostringstream SData;
{
cereal::PortableBinaryOutputArchive Archive(SData);
Archive(PacketData);
//SData is sent to remote machine here through networking library.
}
Мне, должно быть, не хватает ключевой части головоломки, потому что, когда я десериализую данные, программа выдает исключение, если я отлаживаю значения выходных переменных либо пустыми, либо большими отрицательными числами, что заставляет меня поверить, что базовый класс или подкласс не является должным образом сериализуются.
Код был упрощен, чтобы выявить только проблему, для получения дополнительной информации о полной идее вы можете обратиться к -stdvector">на этот вопрос здесь.
Включены следующие жатки для зерновых:
#include <cereal\archives\portable_binary.hpp>
#include <cereal\types\vector.hpp>
#include <cereal\types\memory.hpp>
#include <cereal\types\string.hpp>
Я уверен, что мне понадобится больше, когда я начну добавлять больше типов данных в базовый класс.
Если кто-то знает, что здесь происходит, я был бы очень признателен.
Еще раз спасибо за ваше время.
Finally, the vector is serialized and sent off to a remote machine for processing:
Этот фрагмент кода, вы уверены, что это правильно? Это не выглядит правильно. Этот архив уничтожается, как только он покидает эту локальную область. Кроме того, классы не могут/не должны начинаться со знака подчеркивания. - person Brandon   schedule 13.04.2014