两个客户端在消息层之上相互通信
在消息正文中,我需要包含一个指向任何数据类型的字段
从客户端 A,我将字段作为 a 发送shared_ptr<TYPEA>
到消息层。我将此字段定义为shared_ptr<void>
消息层中的 a 。但是如何将此字段转换回shared_ptr<TYPEA>
客户端 B 中?
或者我应该shared_ptr<void>
在消息层中定义为别的东西吗?
谢谢
两个客户端在消息层之上相互通信
在消息正文中,我需要包含一个指向任何数据类型的字段
从客户端 A,我将字段作为 a 发送shared_ptr<TYPEA>
到消息层。我将此字段定义为shared_ptr<void>
消息层中的 a 。但是如何将此字段转换回shared_ptr<TYPEA>
客户端 B 中?
或者我应该shared_ptr<void>
在消息层中定义为别的东西吗?
谢谢
如果您使用的是 boost::shared_ptr,那么您可以使用各种 XXX_ptr_cast<>() 函数(static_ptr_cast、dynamic_ptr_cast...)。
如果您使用的是 MSVC 2010 版本,我无法找到这些功能的实现。它们可能不是标准的一部分。
如果 shared_ptrs 和指向的数据没有保存在两个客户端共有的内存中(例如,客户端在不同的进程中运行,并且数据不在共享内存中),则来自一个客户端的指针对其他。您需要构建指向数据的表示并传输它。接收者在消息层构建自己的数据副本,并将 shared_ptr 传递给客户端。
如果您计划在客户端之间传递的所有可能的数据类型都继承自某个公共基类,您可以简单地在基类中包含一个标志变量,该变量指示当前实例是哪个派生类型。在客户端之间传递基类指针,然后使用dynamic_cast
将基指针向下转换为适当的派生类型。