【发布时间】:2013-04-14 23:53:07
【问题描述】:
我有一个对象层次结构的反序列化方案,其中大多数对象包含指向其他对象的指针,但不拥有它们。
我正在尝试实施一个两步流程,其中:
- 对象被创建,
Register(Object* pObject)ed 到一个 ID,数据被读取。指针成员被序列化为唯一 ID,因此在读回它们时,我RegisterResolver(int id, Object** ppMember)s。 - 处理解析器:查找 ID 并将正确的地址写入地址
*ppMember(注意取消引用)。
问题:
- 我想强制只注册指向某个
Base类的对象或派生自某个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。
我可以做些什么来提高此解决方案的 [type-] 安全性和可读性?
(目标平台是 x86 和 ARM。)
【问题讨论】:
标签: c++ pointers readability type-safety