我有一個對象層次結構的反序列化場景,其中大多數對象包含指向其他對象的指針,但不擁有它們。在編譯時強制指針指針類型
我試圖實現一個兩步過程,其中:創建
- 對象,
Register(Object* pObject)
編到的ID,數據被讀出。指針成員被序列化爲唯一的ID,因此在讀取它們後,我會RegisterResolver(int id, Object** ppMember)
s。 - 處理解析器:查找ID並將正確的地址寫入地址
*ppMember
(注意取消引用)。
問題:
- 欲執行,只有指針的或派生的對象從某一
Base
類被註冊,但是Derived**
不能轉換到Base**
。 - 欲至少避免歧義使用
void*
(未void**
),該Derived**
/Base**
既可以是轉換爲的情況下,但那麼可以Derived*
/Base*
。
在以下情形:
struct A: public Serialized
{
int blah;
};
struct B: public Serialized
{
float fBlah;
A* pTarget;
};
B myB;
如果接口RegisterResolver(int id, void* ppObject)
,有沒有保證,客戶端代碼不會通過的myB.pTarget
代替&myB.pTarget
。
如何提高此解決方案的[類型]安全性和可讀性?
(目標平臺是x86和ARM。)