Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
~UnifiedFactory(){qDeleteAll(m_builders);}
class CContainer
{
struct SortPred
{
public:
bool operator ()(const boost::any& one, const boost::any& two)
{
return one.type().before(two.type()) ? true : false;
}
};
std::set<boost::any, SortPred> m_objects;
public:
template<typename T>
void RegisterObject(T* pT)
{
m_objects.insert(boost::any(pT));
}
template<typename T>
T* GetObject()const
{
T* pT = NULL;
auto iter = m_objects.find(boost::any(pT));
if (iter == m_objects.end())
{
return NULL;
}
return boost::any_cast<T*>(*iter);
}
template<typename T>
void UnregisterObject(T* pT)
{
auto iter = m_objects.find(boost::any(pT));
if (iter != m_objects.end())
{
m_objects.erase(iter);
}
}
};
A* a = container.GetObject<A>();
B* b1 = container.GetObject<B>("b1");
B* b2 = container.GetObject<B>("b2");
template<class T>
class AutoRegistrer
{
public:
AutoRegistrer(const QString& name)
{
if (registered_++ == 0)
factory()->registerClass<T>(name);
}
private:
static int registered_;
};
template<class T> int AutoRegistrer<T>::registered_= 0;
Yet another factory