Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

register.hh

Go to the documentation of this file.
00001 #ifndef _register_hh_
00002 #define _register_hh_
00003 
00004 #include <string>
00005 #include "loader.hh"
00006 #include "stringhash.hh"
00007 
00008 namespace anoid {
00009     namespace loader {
00010 
00011         class RegisterBase {
00012             private:
00013                 const std::string _name;
00014             public:
00015                 explicit RegisterBase(const char *name);
00016                 virtual Base *instantiate() const = 0;
00017         };
00018 
00019 
00020         template <class T>
00021             class _Register: public RegisterBase {
00022                 public:
00023                     explicit _Register(const char *name): RegisterBase(name) {}
00024                     virtual Base *instantiate() const { return new T; }
00025             };
00026 
00027         extern Loader loader;
00028 
00029     };
00030 };
00031 
00036 #define Register(Class) static ::anoid::loader::_Register<Class> _register##Class(#Class);
00037 
00038 #endif

Anoid NG © Michael Westergaard, Martin Stig Stissing, Ronni Michael Laursen, and Kristian Bisgaard Lassen