#ifndef ARCH_INTERNAL #define ARCH_INTERNAL 1 #include template class DriverList { public: typedef Driver *(*Generator)(); static void AddDriver(int priority, Generator gen) { drivers.insert(pair(priority, gen)); } static Driver *Generate() { Driver *ret = NULL; for(multimap::iterator i = drivers.begin(); i != drivers.end(); ++i) { try { ret = i->second(); } catch(RageException e) { /* XXX */ } } return ret; } static multimap drivers; }; template class DriverEntry { public: static Driver *Generate() { return new Type; } DriverEntry() { DriverList::AddDriver(1, DriverEntry::Generate); } }; #endif