Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // To register a component, place on global scope
- #define REGISTER_CREATOR( NAME ) \
- Component *NAME##Create( void )\
- { \
- return new NAME( ); \
- } \
- NAME##Creator( #NAME, NAME##Create )
- struct Creator
- {
- Creator( const char *name, Component *(*fn)( void ) )
- : Create( fn )
- {
- // Assume FACTORY is a global singleton or pointer
- FACTORY->Register( name, this );
- }
- Component *(*Create)( void );
- }
- class Factory
- {
- public:
- Component *CreateComponent( const std::string& name );
- void Register( const char *name, Creator creator );
- private:
- std::map<std::string, Creator *> m_map;
- };
- Component *Factory::CreateComponent( const std::string& name )
- {
- return m_map[name]->Create( );
- }
- void Factory::Register( const char *name, Creator creator )
- {
- m_map[std::string( name )] = creator;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement