如何上下强制转换c ++智能指针

时间:2010-04-19 22:34:18

标签: c++ smart-pointers

两个客户端在消息层之上相互通信

在邮件正文中,我需要包含一个指向任何数据类型的字段

从客户端A,我将字段作为shared_ptr<TYPEA>发送到消息层。 我在消息层中将此字段定义为shared_ptr<void>。 但是如何将此字段转换回客户端B中的shared_ptr<TYPEA>

或者我应该将消息层中的shared_ptr<void>定义为其他内容吗?

由于

3 个答案:

答案 0 :(得分:2)

如果您正在使用boost :: shared_ptr,那么您可以使用各种XXX_ptr_cast&lt;&gt;()函数(static_ptr_cast,dynamic_ptr_cast ...)。

如果您使用的是MSVC 2010版本,我无法找到这些功能的实现。它们可能不属于标准。

答案 1 :(得分:2)

如果是shared_ptrs&amp;指向数据不保存在两个客户端共有的内存中(例如,客户端在不同进程中运行,而数据不在共享内存中),来自一个客户端的指针对另一个客户端无效。您需要构造指向数据的表示并传输它。接收方在消息传递层中构造自己的数据副本,并将shared_ptr传递给客户端。

答案 2 :(得分:0)

如果您计划在客户端之间传递的所有可能数据类型都从某个公共基类继承,则可以在基类中包含一个标志变量,该变量指示当前实例所属的派生类型。在客户端之间传递基类指针,然后使用dynamic_cast将基指针向下转换为适当的派生类型。