我正在寫一個C++(C++ 11)庫(OpenGL圖形引擎)。用於事件監聽器註冊的存儲指針
我的問題圍繞着註冊事件監聽器的良好編程技術。
我有像這樣類之間的關係:
Program
--has - >SceneManager
--has - >ShaderManager
--has - > * Shader
的Shader
類允許其他對象進行註冊自己作爲ShaderBindListener
,這意味着只要着色器調用bind()
方法,它就會通知任何偵聽器。
ShaderManager
該類是外部圖書館有權訪問的類,並且可以從中創建新的Shader
對象。
現在,我希望每個對象Shader
有Program
對象作爲ShaderBindListener
,使得當Shader
被束縛,Program
對象被通知,並且可以通過矩陣數據等的Shader
在GPU上。
我最初的解決方案是讓Program
對象將指向自己的指針傳遞給SceneManager
,該指針將指針傳遞給ShaderManager
,然後存儲它。無論何時創建新的Shader
,ShaderManager
都會將Program
添加爲偵聽器。
這工作得很好 - 但看起來 - 我不知道,在設計方面有點不對。
也許我只是在迂腐 - 但是這對你們來說好像是不錯的設計嗎?
謝謝@anthony。之前從未聽說過Boost Signals,我會檢查一下。我最初使用的是單身物件,但最近我已經準備好了它們是如何成爲所有邪惡的產物,所以我一直試圖從它們中重構。 – Jarrett 2013-04-07 04:26:37