2011-10-16 38 views
0

假設我有一個Listener類。指針在這種情況下是否會與預期不同?

我有A類和M類都實現了偵聽器類。 A類有4個M's。

每個M都有1個A,但不是A,作爲一個監聽器基類。 (因此,A因爲M對A一無所知而被貶低)。

當A從其中的1個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

它會像你期望的那樣工作。

事實上,爲了進行比較,m_mInstance[0]將隱式轉換爲Listener*以便類型匹配。 if (l == (Listener*)(m_mInstance[0])) ...會編譯成相同的目標代碼。這通常不會產生開銷,除非您有多重繼承,在這種情況下,它可能會產生最小的開銷。

相關問題