Указатель на тип
От: Alexeus  
Дата: 18.05.06 11:26
Оценка: :)
Подскажите пожалуйска кто знает как на C++ (VS2005) объявить указатель на тип, точнее не собственно указатель как например: MyClass *pMyClass, а по аналогии с делфийским объявлением: MyTypeClass = class of MyClass; что бы через этот указатель можно было передать сам тип (если это указатель на базовый класс то типы наследников), а не указатель на объект класса. Что бы с помощью этого указателя потом можно было создать этот объект. Если это можно сделать в делфе, то явно должно быть можно и в сях .
Re: Указатель на тип
От: valker  
Дата: 18.05.06 11:34
Оценка: +1
Здравствуйте, Alexeus, Вы писали:

A>Подскажите пожалуйска кто знает как на C++ (VS2005) объявить указатель на тип, точнее не собственно указатель как например: MyClass *pMyClass, а по аналогии с делфийским объявлением: MyTypeClass = class of MyClass; что бы через этот указатель можно было передать сам тип (если это указатель на базовый класс то типы наследников), а не указатель на объект класса. Что бы с помощью этого указателя потом можно было создать этот объект. Если это можно сделать в делфе, то явно должно быть можно и в сях .


курить шаблоны проектирования: ФАБРИКА, ПРОТОТИП
Posted using RSDN@HOME
Re[2]: Указатель на тип
От: WhiteDev  
Дата: 18.05.06 12:02
Оценка:
Здравствуйте, valker, Вы писали:

V>Здравствуйте, Alexeus, Вы писали:


A>>Подскажите пожалуйска кто знает как на C++ (VS2005) объявить указатель на тип, точнее не собственно указатель как например: MyClass *pMyClass, а по аналогии с делфийским объявлением: MyTypeClass = class of MyClass; что бы через этот указатель можно было передать сам тип (если это указатель на базовый класс то типы наследников), а не указатель на объект класса. Что бы с помощью этого указателя потом можно было создать этот объект. Если это можно сделать в делфе, то явно должно быть можно и в сях .


V>курить шаблоны проектирования: ФАБРИКА, ПРОТОТИП


Александреску
Re: Указатель на тип
От: saddva  
Дата: 18.05.06 12:11
Оценка:
Здравствуйте, Alexeus, Вы писали:

A>Подскажите пожалуйска кто знает как на C++ (VS2005) объявить указатель на тип, точнее не собственно указатель как например: MyClass *pMyClass, а по аналогии с делфийским объявлением: MyTypeClass = class of MyClass; что бы через этот указатель можно было передать сам тип (если это указатель на базовый класс то типы наследников), а не указатель на объект класса. Что бы с помощью этого указателя потом можно было создать этот объект. Если это можно сделать в делфе, то явно должно быть можно и в сях .


Судя по названию, это "class of" сильно напоминает оператор typeid. Результат typeid — объект класса type_info — хранит информацию о типе. Может быть использован, например, так:
// compile with: /GR
A* a = new A();
printf("%s", typeid(*a).name());
if (typeid(*a) == typeid(A))
{
//...
}
Re[2]: Указатель на тип
От: Ubivetz Украина  
Дата: 18.05.06 12:53
Оценка:
Здравствуйте, saddva, Вы писали:

S>Здравствуйте, Alexeus, Вы писали:


A>>Подскажите пожалуйска кто знает как на C++ (VS2005) объявить указатель на тип, точнее не собственно указатель как например: MyClass *pMyClass, а по аналогии с делфийским объявлением: MyTypeClass = class of MyClass; что бы через этот указатель можно было передать сам тип (если это указатель на базовый класс то типы наследников), а не указатель на объект класса. Что бы с помощью этого указателя потом можно было создать этот объект. Если это можно сделать в делфе, то явно должно быть можно и в сях .


S>Судя по названию, это "class of" сильно напоминает оператор typeid. Результат typeid — объект класса type_info — хранит информацию о типе. Может быть использован, например, так:

S>
S>// compile with: /GR
S>A* a = new A();
S>printf("%s", typeid(*a).name());
S>if (typeid(*a) == typeid(A))
S>{
S>//...
S>}
S>

Ему не эт о надо, если я правильно понял. Полное соответствие MyTypeClass = class of MyClass; есть только в С++ от Borland
У меня сейчас нет никакого компиллятора кроме GCC, так что подсказать не могу какое ключевое слово при этом используется.
А вместо
S>
S>// compile with: /GR
S>A* a = new A();
S>printf("%s", typeid(*a).name());
S>if (typeid(*a) == typeid(A))
S>{
S>//...
S>}
S>

можно воспользоваться
dynamic_cast
:
Эх, люблю выпить и переспать с кем нибудь!
Но чаще выходит перепить с кем — нибудь и выспаться...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.