从子对象到完整对象的偏移量
Offset to complete object from subobject
我需要得到一个完整对象的最前面的地址,即使我所拥有的恰好是一个子对象。
我的实验智能指针的当前版本只能比较一个完整对象和它的一个子对象的位置。它只是将它们的地址和大小以字节的形式存储起来,看看它们是否重叠。问题在于在多重继承的情况下比较一个完整对象的两个子对象。由于这些子对象不会相互重叠,因此它们不会被识别为属于同一对象。这将需要从子对象到完整对象"头部"的偏移量来获得完整对象的地址,以便进行比较。
注意,这种比较与访问或析构对象无关。它只能将句柄映射到对象,而不管句柄的子类型是什么。句柄本身负责保存该类型,并在不再存在对同一对象的引用时处理该类型。
是否有可能劫持虚函数表以获得完整对象的偏移量?我找不到一个标准函数来做这个。我的假设是,虚函数表的滥用是高度依赖于实现的,很可能无法在其他编译器上重用。在对象上使用typeid可以计算出给定子对象的完整对象是什么,所以我相信这是可能实现的。可惜它不会返回那个地址…
澄清一下:我不需要子对象在另一个对象中的偏移量。我需要用另一种方式来做,从子对象中找到完整的对象,而不知道完整对象的类型。
dynamic_cast<void*>(myBaseObject);
这样做将获得一个指向最派生类型的指针,即最完整的对象。一旦你有了那个指针你就可以随心所欲了
相关文章:
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 通过指针偏移量访问结构变量值
- 以线程安全的方式转换 C/C++ 中时区名称字符串的时区偏移量
- librdkafka:rd_kafka_assignment 返回分配分区的偏移量 -1001
- 是否通过向封闭对象的地址添加字节偏移量来访问子对象
- 向指针地址添加 20 个字节偏移量
- glMapBufferRange(..) 中的偏移量关系和 glDrawArraysInstanced(..) 中的第一
- 是否有与 C# Structs/StructLayout 等效的功能,C++中的字段偏移量?
- 我的 sumASCII 函数中的此偏移量是多少?
- boost::序列化中的派生类偏移量计算.有效吗?
- RedisGraph 语法错误在偏移量 8 靠近"创建"
- 胎面偏移量的时间复杂度?
- 如何从 c++ 中的给定标准输入中获取每个字符的偏移量?
- 编译器在构造函数中计算的成员偏移量不正确
- 使用基地址和偏移量获取变量的地址
- c++ 读取进程内存基址 + 偏移量不起作用
- 在标准布局对象中进行指针运算(例如,使用偏移量)时,我们是否需要使用 std::launder?
- standard_layout类的数据成员是否与对象的地址有固定的偏移量?
- 从子对象到完整对象的偏移量
- 相同的偏移量在OpenGL中的共享型统一缓冲对象中为4个不同的浮点数