gpt4 book ai didi

c++ - 获取内部对象内部的外部对象指针

转载 作者:行者123 更新时间:2023-12-05 04:19:17 26 4
gpt4 key购买 nike

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

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

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!
}

是否有任何其他建议可以做类似的事情?

最佳答案

只有当类是standard-layout 并且成员是first 成员(member)。这个想法是,编译器可以推断出哪些指针必须转义才能进行写入,从而需要从内存中重新加载一些其他值。因此,在几乎所有情况下,您想要的都是不可能,尽管有 proposals放宽该规则以添加类似这样的功能。

关于c++ - 获取内部对象内部的外部对象指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74858791/

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