1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
#ifndef FACTORYREGISTER_H
#define FACTORYREGISTER_H
#include "objectfactory.h"
#define TYPETOSTRING(Classname) #Classname
template<typename typeBase, typename ClassName>
struct FactoryRegister
{
typedef ObjectFactory<QString,typeBase> Factory;
typedef FactoryRegister<typeBase,ClassName> factoryRegister;
FactoryRegister() {
Factory fac;
fac.registerObject(TYPETOSTRING(Classname), Factory::template derivedClassCreationFunc<ClassName>);
}
};
template<typename typeBase, typename ClassName>
struct AutoRegister : public typeBase
{
typedef FactoryRegister<typeBase,ClassName> factoryRegister;
AutoRegister() {}
static factoryRegister s_factoryregister;
static ClassName* create() {
ObjectFactory<QString,ClassName> fac;
return static_cast<ClassName*> (fac.create(TYPETOSTRING(ClassName)));
}
};
template<typename typeBase, typename ClassName>
FactoryRegister<typeBase,ClassName> AutoRegister<typeBase,ClassName>::s_factoryregister;
#endif // FACTORYREGISTER_H |