Как узнать тип переменной, когда задействовано наследование?
У меня небольшая ситуация, я опишу ее в псевдокоде:
class A
{
public:
A();
virtual ~A();
protected:
//some members
};
class B : public A
{
public:
B();
virtual ~B();
protected:
//some members
};
///////////////////////
int main()
{
A* pA = new B();
std::cout<<"type of pA: "<< ???;
}
Как узнать тип pA? результат должен быть B. Кроме того, что мне делать, если я хочу, чтобы результат был A?
Спасибо.
EDIT:
Я позволю вам судить, плохой дизайн или нет. Если вы думаете, что это так, то, пожалуйста, скажите мне лучшую альтернативу.
Код:
class MyContactReport : public NxUserContactReport
{
void OnContactNotify(NxContactPair& pair, NxU32 events)
{
if (pair.actors[0]->userData == NULL || pair.actors[1]->userData == NULL) return;
LevelElement* otherObject = (LevelElement*)pair.actors[1]->userData;
LevelElement* triggerObject = (LevelElement*)pair.actors[0]->userData;
switch(events)
{
case NX_NOTIFY_ON_START_TOUCH:
triggerObject->OnContactStartTouch(otherObject);
break;
case NX_NOTIFY_ON_END_TOUCH :
triggerObject->OnContactEndTouch(otherObject);
break;
case NX_NOTIFY_ON_TOUCH:
triggerObject->OnContactTouch(otherObject);
break;
}
}
} *myReport;
pair.actors[1]->userData
дает мне доступ к данным пользователя от актера, актер - это что-то из среды PhysX, которая определяет столкновения, физику и т. Д. Пользовательские данные имеют тип void*
.
Это также единственный способ узнать объект, которому на самом деле принадлежит актер.
Тогда есть class LevelElement
, абстрактный класс, от которого наследуется каждый объект моего уровня (уровень как на уровне игры)
LevelElement имеет защищенные виртуальные методы: OnContactTouch(LevelElement* pOtherElement)
и т. Д.
В этих методах мне нужно выяснить, какой это тип LevelElement, чтобы принять определенные конкретные меры.
Это плохой дизайн? Если да, пожалуйста, помогите!