Итак, я новичок в C ++, и моя проблема заключается в следующем:
У меня есть абстрактный класс, который как несколько дочерних классов (и у них были другие дочерние классы тоже). Я пытаюсь использовать полиморфизм для сериализации и десериализации этих дочерних классов, и в моем абстрактном классе:
virtual QDataStream& serialize(QDataStream& stream)=0;
virtual QDataStream& deserialize(QDataStream &stream)=0;
Итак, мой вопрос прост: когда я десериализуюсь, я хочу вызвать функцию десериализации, и я пока не знаю, какой дочерний класс я получаю.
Функция выглядит следующим образом:
QDataStream& operator>>(QDataStream& in, SomeClass& i){
std::shared_ptr<AbstractClass> ptr;
ptr->deserialize(in); //Raises an SIGSEGV error
}
Я не знаю, полностью ли я ясен, но в основном я пытаюсь создать экземпляр и вызвать тот дочерний класс, которому соответствует поток, и вызвать десериализацию для него. Возможно ли это?
Спасибо!
Редактировать: Мой первый подход, который работает, заключался в том, чтобы также передать QDataStream имя моего дочернего класса, чтобы я знал, какой класс создать:
QString myClassName;
in >> myClassName;
if(myClassName == "ChildClass1"){
std::unique_ptr<AbstractClass> ptr(new ChildClass1);
ptr->deserialize(in);
}
Но я чувствую, что это действительно не чистый ООП путь!