将嵌套结构中的指针以编程方式转换为偏移量

时间:2017-01-25 02:54:06

标签: c++ templates pointers struct

这是一个非常具体的问题,我几乎完全确定它不可能,但我想我会试一试。

我有一些看起来像这样的结构:

struct ParentStruct
{
  int valueA;
  const ChildStruct *pointerB;
  const AnotherChildStruct *pointerC;
}

struct ChildStruct
{
  int valueB;
  float valueC;
  const AnotherChildStruct *pointerD;
}

struct AnotherChildStruct
{
  float valueD;
  const ChildStruct *pointerE;
}

在以后的版本中,这些结构可能变得非常大,在其中嵌套其他结构。唯一的保证是所有这些结构都是聚合的,所有这些结构都将存在于连续记忆的单个块中。

为了使ParentStruct可以简单地复制,我想转换ParentStruct实例中的所有指针以及`ParentStruct的任何子节点引用的任何指针(实际上是那些的任何子节点)从struct的地址偏移,然后能够将这些偏移转换回指针。

这意味着以伪代码的样式对结构的每个成员进行深度优先扫描:

template <typename T>
{
void serialize(T const& X, byte& origin)
{
  //scan through every member of X
  for(auto member : X)
  {
    if(is_pointer(member))
    {
      serialize<type_of(member) const&>(&member, origin);
      member = ((byte*) member) - origin;
    }
  }
}
}

反之亦然。

我如何实现上述伪代码?

0 个答案:

没有答案