繁体   English   中英

获取内部对象内部的外部对象指针

[英]Get outer object pointer inside inner object

有两个对象: HolderProperty Holder包含Property作为字段。 我想从Property访问Holder 在一般情况下, Property的地址将是Holder的地址 + Property类型字段的偏移量。

但重要的是: Property不应该有任何字段(例如,我不能将Holder传递给Property的构造函数并将其保存为“外部”)。

UPD:我想这个技巧只适用于标准布局。

UPD2:我想使用这种方法(不传递对Property的引用)的主要原因是在Holder对象中使用尽可能少的内存。 在最好的情况下: sizeof(Property)为 0 字节(尽管标准不允许这样做)。

首先,我尝试做的是将指向成员的指针传递给模板参数:

Property<&Holder::prop> prop;

要么

Property<offsetof(Holder, prop)> prop;

但是prop还没有定义(这是错误的)。

完整的伪代码如下所示:

template<size_t FieldOffset>
class Property
{
    class Holder* GetOuter()
    {
           return (char*)this - FieldOffset;  // go to Outer object via offset of our field
    }
}

class Holder
{
    int Field1;
    std::string Field2;
    Property<offsetof(Holder, prop)> prop;  // Error!
}

还有其他建议可以做类似的事情吗?

只有当类是标准布局且成员是第一个成员时,C++ 中的内存模型才允许从成员子对象导航到它的包含(类类型)对象。 这个想法是,编译器可以推断哪些指针必须转义才能进行写入,从而需要从内存中重新加载一些其他值。 因此,几乎在所有情况下你想要的都是不可能的,尽管有人提议放宽该规则以添加类似这样的功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM