Итак, я новичок в С++, и моя проблема заключается в следующем: у меня есть абстрактный класс, который является несколькими дочерними классами (и у них были и другие дочерние классы). Я пытаюсь использовать полиморфизм для сериализации и десериализации этих дочерних классов и иметь в своем абстрактном классе:
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);
}
Но я чувствую, что это действительно не чистый способ ООП!