我正在编写一个游戏框架,并且我正在尝试概括和封装依赖于平台的代码,例如渲染器,以便它更容易移植。我正在尝试实现这一点,同时仍然拥有使用框架的干净方式。我目前遇到静态变量和命名空间的问题......
// 渲染器.h 命名空间渲染器 { 静态 IRenderer* g_pRenderer = NULL; 静态 IRenderer* Get(void) { return g_pRenderer; } 静态 IRenderer* CreateD3DRenderer() { g_pRenderer = new RendererD3D(); // 派生自 IRenderer 返回 g_pRenderer; } }
所以在 my 中main()
,我可以调用CreateD3DRenderer()
它并返回一个实例就好了;g_pRenderer
保持它的值,因为它是在其函数范围内创建和返回的......但是,Renderer::Get()
返回NULL
. 'static'
在其他文件中使用时,从 init of 中删除g_pRenderer
会导致冲突。
这是怎么回事?