我正在编写一个游戏框架,并且我正在尝试概括和封装依赖于平台的代码,例如渲染器,以便它更容易移植。我正在尝试实现这一点,同时仍然拥有使用框架的干净方式。我目前遇到静态变量和命名空间的问题......
// 渲染器.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会导致冲突。
这是怎么回事?