所以我是 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);
}
但我觉得这真的不是一个干净的 OOP 方式!