簡體   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