簡體   English   中英

如何上下強制轉換c ++智能指針

[英]how to cast c++ smart pointer up and down

兩個客戶端在消息層之上相互通信

在消息體中,我需要包含一個指向任何數據類型的字段

從客戶端A,我將字段作為shared_ptr<TYPEA>發送到消息層。 我將此字段定義為消息層中的shared_ptr<void> 但是如何將此字段轉換回客戶端B中的shared_ptr<TYPEA>

或者我應該將消息層中的shared_ptr<void>定義為其他內容嗎?

謝謝

如果您正在使用boost :: shared_ptr,那么您可以使用各種XXX_ptr_cast <>()函數(static_ptr_cast,dynamic_ptr_cast ...)。

如果您使用的是MSVC 2010版本,我無法找到這些功能的實現。 它們可能不屬於標准。

如果shared_ptrs和指向的數據不保存在兩個客戶端共有的內存中(例如,客戶端在不同的進程中運行,並且數據不在共享內存中),則來自一個客戶端的指針對於其他。 您需要構造指向數據的表示並傳輸它。 接收方在消息傳遞層中構造自己的數據副本,並將shared_ptr傳遞給客戶端。

如果您計划在客戶端之間傳遞的所有可能數據類型都從某個公共基類繼承,則可以在基類中包含一個標志變量,該變量指示當前實例所屬的派生類型。 在客戶端之間傳遞基類指針,然后使用dynamic_cast將基指針向下轉換為適當的派生類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM