의 내가 좋아하는 뭔가가 있다고 가정하자슈퍼 클래스 생성자에서 호출 객체의 하위 클래스를 알 수있는 방법이 있습니까? C++
class A
{
public:
A(A* owner)
{
m_owner=owner;
if (dynamic_cast<B*>(this))
{
m_id=sm_bid;
sm_bid++;
}
else
{
m_id=sm_aid;
sm_aid++;
}
}
private:
int m_id;
A* m_owner;
static int sm_aid;
static int sm_bid;
};
A::sm_aid=0;
A::sm_bid=0;
class B: public A
{
B(A* owner) : A(owner) {}
};
불행하게도, dynamic_cast는이 (인스턴스화 경우) 그것이 B 객체가 있음을 잡을 수 없습니다입니다. 이 사운드는 논리적입니다 (슈퍼 클래스의 생성자가 서브 클래스의 생성자를 호출하기 전에 호출되기 때문에 이러한 기능을 구현하는 방법이 있습니까?)
'std :: type_info'를'A :: A'로 전달하는 것은 어떻습니까? – Quentin
'A'의 생성자가'B's 이전에 호출 되었기 때문에 (즉,'B'가 실제로 구성되는 정보가 있기 전에), 아니요. 어쨌든 왜 이것을하고 싶습니까? - 이것은 Liskov 대체 원칙을 준수하는 것과 같은 훌륭한 기술과 완전히 반대입니다. – Peter
이것은 좋은 디자인 같지 않습니다. 왜 기초 계층은 그 아이에 대해 어떤 지식을 가지고 있습니까? – freakish