2011-10-16 2 views
0

Listener 클래스가 있다고 가정 해보십시오.이 경우 포인터가 예상 한 것과 다를 수 있습니까?

클래스 A와 클래스 M 모두에서 수신기 클래스를 구현합니다. 클래스 A에는 4 개의 M이 있습니다.

각 M에는 A가 아닌 A가 리스너 기본 클래스로 있습니다. (그래서 M은 A에 대해 아무 것도 모르기 때문에 A가 내려졌다.)

A가 M 중 하나에서 메시지를 가져 오면 어떤 M이 메시지를 보냈는지 알 수 있어야합니다.

따라서 Listener 클래스의 모든 메서드에는 Listener * 매개 변수가 있습니다.

그래서 나는 이런 식으로 뭔가가있는 경우 :

그래서 기본적으로 내가 부탁 해요 무엇
void A::someListenerMethod(Listener* l, MsgEnum msg) 
{ 
    if(l == m_mInstance[0]) 
    { 
     //will this work if the caller was indeed the M instance in question? 
    } 

} 

입니다, 내가 그들을 비교하기 전에 M의 청취자를 다운 캐스트해야합니까?

때때로 C++은 다중 상속을 위해 하위 클래스에 대해 별도의 객체를 만들 것이라고 읽었습니다. 이 경우에는 다중 상속이 없지만 이것이 제대로 작동하는지 확인하고자합니다.

감사합니다.

답변

1

예상대로 작동합니다.

실제로 비교를 수행하기 위해 Listener*으로 유형을 일치시키기 위해 암시 적으로 캐스트됩니다. if (l == (Listener*)(m_mInstance[0])) ...은 동일한 대상 코드로 컴파일됩니다. 일반적으로 다중 상속이 없으면 오버 헤드가 발생하지 않으므로 오버 헤드가 최소화됩니다.

관련 문제