提到这个类我们不得不提及Template GenericManager


下面对成员函数进行分析
对于一个管理类的,它的操作总少不了对map成员变量的增删,
(如果加入改查的话,可能manager的职能就太细了。manager这种paradim)
值得介绍的应属对控件的创建:
IObject* FactoryManager::createObject(const std::string& _category, const std::string& _type)
{
MapRegisterFactoryItem::iterator category = mRegisterFactoryItems.find(_category);
if (category == mRegisterFactoryItems.end())
{
return nullptr;
}
MapFactoryItem::iterator type = category->second.find(_type);
if (type == category->second.end())
{
return nullptr;
}
if (type->second.empty())
{
return nullptr;
}
IObject* result = nullptr;
type->second(result);
return result;
}可以看到凡是继承与基类IObject 的子类都可以通过FactoryManger创建。这就为控件的动态生成埋下伏笔。

何时调用createObject
猜测 有两种可能:
1)hard code
2)通过Widget来注册注入。
本文详细解析了动态生成控件的工厂管理器类,包括成员函数的实现和使用场景,以及如何通过该管理器创建继承自基类IObject的子类控件。
732

被折叠的 条评论
为什么被折叠?



