我目前正在處理三個指針的自定義容器,並且有興趣檢測最基本指針的狀態何時發生更改。檢測對未知模板對象的修改
第一個容器(主機)是一個類,它具有指向由模板提供的對象的唯一指針,以及註冊的觀察者列表。當它被銷燬或模板的數據被修改時,它會告訴每個觀察者該事件發生。
第二個容器(Observer)是一個類,它包含一個指向Host的指針和兩個在主機的模板數據被修改(doModified)或主機被刪除(doDeleted)時被調用的lambda函數。它在分配給主機時註冊自己。
第三個容器(ObserverVector)是一個向量,它包含可能註冊或不註冊到不同主機的觀察者。它將自己的函數插入到Observers的lambda函數中,以便在刪除主機時清除它,並且在修改主機時進行自我維護。
實現doDeleted很簡單,但我很難實施doModified。我最初想要的是找出模板的賦值運算符何時被調用,但這不適用於任何可以通過非默認運算符函數修改的對象。我目前最好的解決方案是僅使用容器,其中使用IsModified lambda成員定義的類,在每個修改函數中調用該成員,並讓Host將其中一個函數插入該成員。如果我在我的代碼庫中使用它,這將是一件苦差事。
我在ObserverVector中不使用常規弱指針的主要原因是性能方面的擔憂:我會在遊戲中每次讀取時都會多次讀取每個ObserverVector的整個容器(並且不可避免)。我知道我正在處理一個固有的O(n * log(n))問題,所以減少有效性檢查將幫助我在這方面。實現一種迭代垃圾收集,在遊戲結束時進行掃描是我的最終目標:在下一次遊戲開始前,我要隱藏矢量調整大小和重新排序抖動。長篇小說:我想知道是否有一個不太詳細和較少侵入性的解決方案來確定包含的數據何時被修改,同時仍然保持通用。