我正在編寫一個遊戲框架,我試圖推廣和封裝與渲染器相關的平臺相關代碼,以便它使端口更容易一些。我試圖做到這一點,同時仍然有一個乾淨的方式來使用框架。我目前具有靜態變量和命名空間的問題......命名空間中的靜態變量
// Renderer.h namespace Renderer { static IRenderer* g_pRenderer = NULL; static IRenderer* Get(void) { return g_pRenderer; } static IRenderer* CreateD3DRenderer() { g_pRenderer = new RendererD3D(); // Derived from IRenderer return g_pRenderer; } }我
main()
所以,我可以打電話CreateD3DRenderer()
,並返回一個實例就好了; g_pRenderer
自其創建並在其功能範圍內保留其值,但是,Renderer::Get()
返回NULL
。在g_pRenderer
的init中刪除'static'
會導致在其他文件中使用衝突。
發生了什麼事?
我沒有任何其他變量使用相同的名稱。雖然在技術上,它包含了代碼所在的頭部後會重新聲明,所以我非常理解。但除此之外,這是該程序中此名稱的唯一變量。 – Sutanreyu