今天将Serialization进行了重构,让其支持容器。于是使用以前的基础设施就能完成这 个Demo了。
为什么要做成这个样子呢?因为模板没有运行时匹配功能。虽然仍然大量 使用模板,但是接口上就没有了。模板被用来处理其他的事情。
这个程序分为服务器 端和客户端两个部分,使用Socket连接。服务器端监听到一个客户端之后将一棵树发送过去 之后退出。客户端接收到这棵树之后将内容打印到屏幕上。于是我们实现一颗多态的树。树 的节点分为数字节点、字符串节点和列表节点三种,共同继承自一个基类。这样的话就可以 使用多态来构造成一棵树并进行操作了:
1 class Node : public VL_SerializableObject 2 { 3 public: 4 typedef VL_AutoPtr<Node> Ptr; 5 6 virtual VUnicodeString ToString(VUnicodeString Prefix)=0; 7 }; 8 9 class NumberNode : public Node10 {11 public:12 VInt Number;1314 NumberNode()15 {16 VL_SERIALIZABLE_FIELD(NumberNode,Number);17 }1819 VUnicodeString ToString(VUnicodeString Prefix)20 {21 return Prefix+VUnicodeString(Number);22 }23 };2425 class IdNode : public Node26 {27 public:28 VUnicodeString Id;2930 IdNode()31 {32 VL_SERIALIZABLE_FIELD(IdNode,Id);33 }3435 VUnicodeString ToString(VUnicodeString Prefix)36 {37 return Prefix+Id;38 }39 };4041 class ListNode : public Node42 {43 public:44 VL_List<Ptr , false , Node*> Children;4546 ListNode()47 {48 VL_SERIALIZABLE_FIELD(ListNode,Children);49 }5051 VUnicodeString ToString(VUnicodeString Prefix)52 {53 VUnicodeString Result;54 Result+=Prefix+L"List {\r\n";55 for(VInt i=0;i<Children.GetCount();i++)56 {57 if(Children[i])58 {59 Result+=Children[i]->ToString(Prefix+L" ")+L"\r\n";60 }61 else62 {63 Result+=Prefix+L" <NULL>\r\n";64 }65 }66 Result+=Prefix+L"}";67 return Result;68 }69 };
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索多态
, tostring
, 节点
, public
, result
1819
轮子哥vczh老婆照片、vczh 陈萌萌图片、陈萌萌 vczh照片、陈萌萌 vczh、vczh博客,以便于您获取更多的相关知识。
时间: 2024-09-20 15:37:48