根据类名信息动态创建对象技术,不仅可以降低代码的耦合度和复杂性,还可以实现脚本化编程技术,动态解析创建对象,提高内存利用率和应用程序灵活性。
反射机制框架如下:
Reflect类声明如下:
typedef QWidget* (*Constructor)(QWidget* parent);
class Reflect
{
public:
Reflect();
//通过类名,查找到注册的构造函数,并创建对象
static QWidget *reflect(QWidget* parent, const QString& className);
//注册构造函数
static void registerClass(const QString& className, Constructor constructor);
private:
//创建对象工厂
static QWidget* createWidgetFactory(QWidget* parent,const QString& className);
//存储注册的构造方法函数指针
inline static QMap<QString , Constructor>& constructors(){
static QMap<QString , Constructor> _instances;
return _instances;
}