From dc4d0317b581bc37bcb6a5384b5f16736ce5e4f2 Mon Sep 17 00:00:00 2001 From: Steve Checkoway Date: Sun, 19 Nov 2006 00:33:52 +0000 Subject: [PATCH] Don't create a new class just to register a screen. --- stepmania/src/Screen.h | 8 ++------ stepmania/src/ScreenManager.cpp | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/stepmania/src/Screen.h b/stepmania/src/Screen.h index 5ea34964d9..6c11f5486d 100644 --- a/stepmania/src/Screen.h +++ b/stepmania/src/Screen.h @@ -12,15 +12,11 @@ class InputEventPlus; class Screen; typedef Screen* (*CreateScreenFn)(const RString& sClassName); -void RegisterScreenClass( const RString& sClassName, CreateScreenFn pfn ); - // Each Screen class should have a REGISTER_SCREEN_CLASS in its CPP file. +struct RegisterScreenClass { RegisterScreenClass( const RString &sClassName, CreateScreenFn pfn ); }; #define REGISTER_SCREEN_CLASS( className ) \ static Screen* Create##className( const RString &sName ) { LuaThreadVariable var( "LoadingScreen", sName ); Screen *pRet = new className; pRet->SetName( sName ); Screen::InitScreen( pRet ); return pRet; } \ - struct Register##className { \ - Register##className() { RegisterScreenClass( #className,Create##className); } \ - }; \ - static Register##className register_##className; + static RegisterScreenClass register_##className( #className, Create##className ) enum ScreenType { diff --git a/stepmania/src/ScreenManager.cpp b/stepmania/src/ScreenManager.cpp index 5900334888..5d20f507ff 100644 --- a/stepmania/src/ScreenManager.cpp +++ b/stepmania/src/ScreenManager.cpp @@ -207,7 +207,7 @@ namespace ScreenManagerUtil }; using namespace ScreenManagerUtil; -void RegisterScreenClass( const RString& sClassName, CreateScreenFn pfn ) +RegisterScreenClass::RegisterScreenClass( const RString& sClassName, CreateScreenFn pfn ) { if( g_pmapRegistrees == NULL ) g_pmapRegistrees = new map;