Re: Указатель на тип
От: DigitalGuru Россия http://svetlyak.ru
Дата: 18.05.06 12:53
Оценка:
Здравствуйте, 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;
}


Примерно так. Только лучше использовать какие-нибудь "умные указатели" для передачи прав владения фабрикой и создаваемыми объектами.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.