現在,在我的遊戲gui API中,例如,我有一個MouseListener。有關此設計的幫助
這只是一個帶方法的抽象類。現在,它的使用方式如下:
可以說,我想一個Widget接受鼠標監聽器:
我創建鼠標偵聽的載體,提供添加和刪除功能刪除監聽器。每當事件發生時,該Widget將調用所有鼠標偵聽器的方法(例如:鼠標向下)。
在事情的另一方面,您將有一個實現MouseListener方法的類。
我對這個系統唯一的問題是,如果Listener被破壞,它無法通知它正在監聽的所有東西。
所以我想要一個系統,如果任何一端被破壞,他們都會得到通知,並將對方彼此移除,就像他們從未被添加過一樣。
我也想這樣做,以便每個Listener(例如:MouseListener)都從Listener繼承,這樣任何想要創建更精細的Listener類的人都可以輕鬆使用此功能。
任何想法設計這樣的東西將不勝感激。 謝謝
一個設計是,非boost,非C++ 0x,非自動垃圾收集,非智能指針....只是普通的舊C++ 98標準解決方案。
嗯夠公平的。我不喜歡所有這些新老化的花式提升垃圾收集等。但從我收集的閱讀遊戲編碼完成Origin系統公司的Mike和Ultima VII/VIII成名後,弱指針和強指針的概念就被人們用來實現自己。但是現在人們已經習慣了使用新的C++標準進行標準化,所以爲什麼不跟他們一起幹呢? – 2011-04-26 03:21:05
滾動你自己也不算太困難,基本前提是每個指針實際上是兩個指針,一個指向內存中的一些對象,弱/強引用,另一個指向對象本身。當強參考計數器達到零時,該對象被銷燬,而當所有參考計數器達到零時參考計數器被銷燬。每次指針被銷燬時,它都會要求參考計數器減少其類型(弱/強)的計數。 這應該可以在C++ 98甚至C中實現。 – 2011-04-26 03:23:36