Здравствуйте, Alexeus, Вы писали:
A>курить шаблоны проектирования: ФАБРИКА, ПРОТОТИП
A>Признатся из этой фразы ничего не понял. Как можно прикрутить шаблоны если после компиляции их уже не будет, этож статическая штука, а мне надо что я в рантайме мог передать какому нить классы тап тругого класса что бы первый его мог создать, о как !
A>Если я чего не понял, то объясните плз.
class CommonInterface
{
public:
virtual ~CommonInterface() {}
// pure virtual methods
virtual void doSomeThing() = 0;
};
class FactoryInterface
{
public:
virtual ~FactoryInterface() {}
virtual CommonInterface *createObject() const = 0;
};
template <class T>
class Factory : public FactoryInterface
{
virtual CommonInterface *createObject() const
{ return new T(); }
};
class SomeClassThatWhanToCreateDifferentObjects
{
public:
void useThisFactory( FactoryInterface *pFactory )
{ m_pFactory = pFactory; }
void mainWorkingMethod()
{
// some work
CommonInterface *pObject = pFactory->createObject();
// do some thing with the object
// ...
// destroy the object
delete pObject;
}
private:
FactoryInterface *m_pFactory;
};
class MyRealClass : public CommonInterface
{
// bla-bla-bla
};
int main()
{
SomeClassThatWhanToCreateDifferentObjects app;
Factory<MyRealClass> factory;
app.useThisFactory( &factory );
app.mainWorkingMethod();
return 0;
}
Примерно так. Только лучше использовать какие-нибудь "умные указатели" для передачи прав владения фабрикой и создаваемыми объектами.