私はゲーム フレームワークを書いており、レンダラーのようなプラットフォームに依存するコードを一般化してカプセル化して、移植を少し簡単にしようとしています。フレームワークをきれいに使用しながら、これを達成しようとしています。現在、静的変数と名前空間に問題があります...
// Renderer.h
名前空間レンダラー
{
static IRenderer* g_pRenderer = NULL;
static IRenderer* Get(void) { return g_pRenderer; }
static IRenderer* CreateD3DRenderer()
{
g_pRenderer = new RendererD3D(); // IRenderer から派生
g_pRenderer を返します。
}
}
したがって、私のmain()では、呼び出すことができCreateD3DRenderer()、インスタンスを正常に返します。g_pRenderer関数のスコープ内で作成されて返されているため、値を保持しています...ただし、 . をRenderer::Get()返しますNULL。'static'init of から削除するg_pRendererと、他のファイルで使用すると衝突が発生します。
どうしたの?