我正在编写一个游戏框架,我试图推广和封装与渲染器相关的平台相关代码,以便它使端口更容易一些。我试图做到这一点,同时仍然有一个干净的方式来使用框架。我目前具有静态变量和命名空间的问题......命名空间中的静态变量
// 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