【发布时间】:2015-02-08 12:52:22
【问题描述】:
这里我们有一个简单的节点结构,可能用于实现双链表。
template <class T>
struct node {
node<T> *prev = NULL;
node<T> *next = NULL;
T data;
};
假设我们不知道或没有对节点对象/实例的引用,但我们确实有一个指向它的 data 成员的指针。 T数据;
如何从指向它的 data 成员的指针中引用/找到主机节点对象?
【问题讨论】:
-
你不能便携。您可能会找到一种方法来破解
offsetof宏和reinterpret_cast<>处理char *和node *之间的所有内容,但这在技术上是未定义的行为。如果您需要表达双向关系,则使用从每个子节点到其父节点的反向指针。 -
您在问如何找到列表中的
head?T* data;BTW 看起来很奇怪。 -
你真的有指向成员的指针 (
pointer == &node.data) 还是你有存储在该成员中的指针 (pointer == node.data)?如果是后者,则找不到。 -
抱歉,已编辑!它应该是:T 数据不是:T* 数据
标签: c++ pointers member host-object