我希望序列化Message
实例以通过网络发送它,然后接收它,并将数据反序列化为相同的Message
实例,这不是问题。
问题是我希望其他人能够继承Message
类,但反序列化变得困难,因为我不知道序列化数据来自哪个子类,所以我不# 39;不知道要使用哪种反序列化功能。
序列化更容易,因为我可以创建一个子类必须实现的抽象serlialize
方法。这样,在运行时,我可以调用Message::serialize()
。
在序列化发生之前,我所拥有的只是指向Message
实例的指针。在反序列化之后,我希望有一个指向Message
实例的指针(不是指向Message
类的子类的指针)。
我想出了一些解决方案,但我并不特别喜欢它们,因为它们看起来很难维护。如果必须,我会使用它们,但我想知道是否还有其他方法。
我在C++
中执行此操作。
我需要确定序列化数据的子类,以确定要使用哪个反序列化函数。 以下是我到目前为止所考虑的可能解决方案:
getCanonicalName()
?在确定Message
实例所属的子类之后,我需要执行deserilization函数,但我的直接解决方案是凌乱的。 以下是我到目前为止所考虑的一些可能的解决方案,我希望改进,并避免其他方式:
Message
时,他们就必须在switch语句中添加一个case,这是不可取的,因为对于那些子类Message
来说,switch语句的存在并不明显。Message
类的每个子类的条目将插入到映射中,因此在收到Message
后来自网络的实例,并确定子类类型,我可以在地图中查找反序列化函数,并调用它。 此解决方案存在问题:
Message
的子类在编译时插入一个条目。感谢您阅读所有内容。