C ++:如何从指向成员变量的指针查找宿主对象

C++: How to find host object from pointer to member variable

这里我们有简单的节点结构,可能用于实现双链表。

template <class T>
struct node {

    node<T> *prev = NULL;
    node<T> *next = NULL;
    T data;
};

假设我们不知道或没有引用节点 object/instance,但我们有一个指向它的 data 成员的指针。 T数据;

主机节点对象如何 referenced/found 从指针指向它的 data 成员?

详细说明 StenSoft 评论,如果您只知道 data 成员的 value,您将无法获取包含它的结构。

但是如果你知道它的地址,说 T** member_addr 可以 找到 node :

void * ma = static_cast<void *>(member_addr); // convert pointer to void * : legal
intptr_t ima = static_cast<intptr_t>(ma); // convert void * to intptr_t : legal
intptr_t ina = ima - offsetof(struct node, data); // legal by definition of offestof
void * na = static_cast<void *>(ina); // convert intptr_t to void * : legal
struct node *pn = static_cast<node *>(na); // convert void * to pointer : legal provided the initial void * pointer points to a correct object

当然,所有这些仅对 C++11 或更高版本合法。