gpt4 book ai didi

C++:字段对象可以在不存储指针的情况下知道它的 "parent"吗?

转载 作者:太空宇宙 更新时间:2023-11-04 11:57:44 25 4
gpt4 key购买 nike

假设我有这个设置:

struct XView;
struct X
{
...
XView view;
};

Type XView 仅用于这一字段;它也是内部的,因此禁止从外部实例化它,即禁止将它用于任何其他用途。

因此,假设XView 类型的任何 对象是一个X::view 字段,是否有可能找到 的地址X 来自 XView 的地址,完全符合 C++ 标准定义的行为并且没有类型双关? IE。是否有可能做这样的事情:

void XView::some_function ()
{
X& this_x = some_computations_involving (this);
}

我当然可以存储一个指针,所以这将变得像 x = *this->parent_x 一样微不足道,但如果可能的话我希望没有指针。

编辑:请注意,我需要一个不涉及类型双关的答案,否则我宁愿使用“只存储一个指针”的解决方案。

最佳答案

第一种方法是让 XView 成为 X 的第一个成员,然后你可以这样做:

void XView::some_function ()
{
X & this_x = reinterpret_cast<X&>(*this);
}

第二种方法是在 XView 不是 X 的第一个成员时使用偏移量。

从技术上讲,如果不涉及虚拟性,这两种方法是相同的,只是第一种方法是第二种方法的特殊情况(即当偏移量 = 0 时),这是一般情况。

至于编辑,我认为不强制转换是不可能的。您必须将指针存储在 XView 中,或者维护指针的映射(或其他一些数据结构)。

关于C++:字段对象可以在不存储指针的情况下知道它的 "parent"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15453809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com