С форумом пока не разобрался, так что не судите строго за некоректные коменты.
Судя по названию, это "class of" сильно напоминает оператор typeid. Результат typeid — объект класса type_info — хранит информацию о типе. Может быть использован, например, так:
// compile with: /GR
A* a = new A();
printf("%s", typeid(*a).name());
if (typeid(*a) == typeid(A))
{
//...
}
Про typeid знаю, пробовал но ничего путного из этого не получилось. Как мне кажется typeid совсем не для этих целей.
курить шаблоны проектирования: ФАБРИКА, ПРОТОТИП
Признатся из этой фразы ничего не понял. Как можно прикрутить шаблоны если после компиляции их уже не будет, этож статическая штука, а мне надо что я в рантайме мог передать какому нить классы тап тругого класса что бы первый его мог создать, о как !
Если я чего не понял, то объясните плз.
Здравствуйте, Alexeus, Вы писали:
A>курить шаблоны проектирования: ФАБРИКА, ПРОТОТИП
A>Признатся из этой фразы ничего не понял. Как можно прикрутить шаблоны если после компиляции их уже не будет, этож статическая штука, а мне надо что я в рантайме мог передать какому нить классы тап тругого класса что бы первый его мог создать, о как !
A>Если я чего не понял, то объясните плз.
1. лучше продолжать дискуссию в той же теме, а не открывать новую — разбирайся.
2. шаблоны проектирования (design patterns) — это НЕ ТО ЖЕ САМОЕ что шаблоны C++ (templates). ищи и читай вот
эту книжку.
Posted using RSDN@HOME
Здравствуйте, 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;
}
Примерно так. Только лучше использовать какие-нибудь "умные указатели" для передачи прав владения фабрикой и создаваемыми объектами.
Здравствуйте, valker, Вы писали:
V>1. лучше продолжать дискуссию в той же теме, а не открывать новую — разбирайся.
V>2. шаблоны проектирования (design patterns) — это НЕ ТО ЖЕ САМОЕ что шаблоны C++ (templates). ищи и читай вот эту книжку.
Угу, роазберёмся. Я просто к phpBB привык.
Про (design patterns) и не слышал. Сейчас покапаюсь разберусь. Надеюсь это то что нужно.
Здравствуйте, DigitalGuru, Вы писали:
оверквотинг вырезан — Кодт
<...>
DG>Примерно так. Только лучше использовать какие-нибудь "умные указатели" для передачи прав владения фабрикой и создаваемыми объектами.
Гм ... всё гениальное просто. Пасиба
Здравствуйте, DigitalGuru, Вы писали:
DG>Здравствуйте, Alexeus, Вы писали:
A>>курить шаблоны проектирования: ФАБРИКА, ПРОТОТИП
A>>Признатся из этой фразы ничего не понял. Как можно прикрутить шаблоны если после компиляции их уже не будет, этож статическая штука, а мне надо что я в рантайме мог передать какому нить классы тап тругого класса что бы первый его мог создать, о как !
A>>Если я чего не понял, то объясните плз.
DG>DG>class CommonInterface
DG>{
DG>public:
DG> virtual ~CommonInterface() {}
DG> // pure virtual methods
DG> virtual void doSomeThing() = 0;
DG>};
DG>class FactoryInterface
DG>{
DG>public:
DG> virtual ~FactoryInterface() {}
DG> virtual CommonInterface *createObject() const = 0;
DG>};
DG>template <class T>
DG>class Factory : public FactoryInterface
DG>{
DG> virtual CommonInterface *createObject() const
DG> { return new T(); }
DG>};
DG>class SomeClassThatWhanToCreateDifferentObjects
DG>{
DG>public:
DG> void useThisFactory( FactoryInterface *pFactory )
DG> { m_pFactory = pFactory; }
DG> void mainWorkingMethod()
DG> {
DG> // some work
DG> CommonInterface *pObject = pFactory->createObject();
DG> // do some thing with the object
DG> // ...
DG> // destroy the object
DG> delete pObject;
DG> }
DG>private:
DG> FactoryInterface *m_pFactory;
DG>};
DG>class MyRealClass : public CommonInterface
DG>{
DG>// bla-bla-bla
DG>};
DG>int main()
DG>{
DG> SomeClassThatWhanToCreateDifferentObjects app;
DG> Factory<MyRealClass> factory;
DG> app.useThisFactory( &factory );
DG> app.mainWorkingMethod();
DG> return 0;
DG>}
DG>
DG>Примерно так. Только лучше использовать какие-нибудь "умные указатели" для передачи прав владения фабрикой и создаваемыми объектами.
На СОМ сильно смахивает