簡體   English   中英

如何像stl迭代器一樣“使對象無效”

[英]How to “invalidate” an object like an stl iterator

模糊的標題,但有點難以解釋我需要100個字符。 我有一張地圖地圖,每個地圖都包含不同類型的派生對象。 看起來像這樣:

/* will use smart pointers in the final product, just using plain 
   pointers to simplify the example.*/

// The long is a type id and the string is a unique identifier
std::map<long, std::map<std::string, Node *> > m_NodeList;

每個節點根據其特定類型包含一個或多個組件。 這些組件位於地圖中的不同地圖中。 看起來像這樣。

std::map<long, std::map<std::string, Component *> > m_ComponentList;

這種互動的一個例子是這樣的:

class Mesh :
    public Component
{
    // some graphics api stuff
};

class Vector3 :
    public Component
{
public:
    float x, y ,z;
};

class Graphics :
    public Node
{
public:
    Node(Vector3 & vec, Mesh & model) :
        m_Pos(vec),
        m_Model(model)
        {}

    Vector3 & m_Pos;
    Mesh & m_Model;
};

我有很多類型的魔法,因為我以前做過類似的事情,但現在我遇到了依賴問題。 我希望組件和節點能夠在任何給定時間從系統中刪除。 但是,節點總是依賴於組件的存在。 邏輯就像這樣,如果一個節點被刪除,沒有變化,如果一個組件被刪除,我還需要刪除所有依賴它的節點。 假設這兩個映射都存在於對象調用Mediator中。 你們如何保留依賴項列表,以便調解員知道還會破壞某些節點? 此外,如果您以不同方式組織此計划,我也想聽聽它。 提前致謝!

編輯:如果你能想到一個更相關的標題,謝謝你-_-

組件需要指向所有依賴節點,並在銷毀時刪除它們。 在創建或銷毀從屬節點時,需要通知組件,以便組件可以更新所有從屬節點的列表。

使用具有自動取消鏈接的Boost.Intrusive列表用於依賴節點列表可能是有益的,因為當節點被銷毀時,它將從列表中自動刪除。

使用自動取消鏈接而不是在std :: map中存儲Boost.Intrusive集中的節點也可能有所幫助。

請注意,要從侵入式容器中刪除節點,您不需要指向容器本身的指針。 您只需刪除該節點,它就會自動刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM