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;
};
假设我们不知道或没有引用节点对象/实例,但我们有一个指向其数据成员的指针。T数据;
如何从指向主机节点对象数据成员的指针中引用/找到该对象?
在StenSoft注释上精化,如果您只知道data
成员的值,则无法获得包含它的结构。
但如果你知道它的地址,比如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或更高版本。
相关文章:
- 为什么指针对象没有调用默认构造函数
- 如何访问双指针对象中的方法
- 如何使用智能指针对象执行成员函数指针
- 调用带有指针对象错误的指针变量
- 如何从模板类重载创建的指针对象上的运算符?
- C++指针对象的运算符重载
- 如何初始化数组指针对象
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- C++指针对象差异
- 涉及继承,指针对象的交易以及何时进行的问题
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 字符指针对象和相应的字符数组元素比较
- 如何在 c++ 中克隆为弱指针对象
- 指针对象使用CPP中的指针表达式进行比较
- Visual Studio中智能指针对象的自定义视图
- 使用指针 /对象 /模板参数正确构成
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 如何将值分配给指针对象 c++
- 更改智能指针对象,然后访问它