2012-11-07 89 views
2

我有一個基類基地和兩個派生類DerivedA,DerivedB大多數efficent方式來實現在Base類的函數

class Base 
{ 
}; 

class DerivedA: public Base 
{ 
    CallbackTypeA callA; // call back function pointer of type CallbackTypeA. 
}; 

class DerivedB : public Base 
{ 
    CallbackTypeB callB; // call back function pointer of type CallbackTypeB. 
}; 

可有人告訴我這是爲執行Base類的函數最efficent方式 根據哪個對象調用它來檢查callA或callB的特定條件? 由於目前的限制,我不想使用虛函數

+8

爲什麼你不使用虛擬功能? – anand

+1

問題不清楚。你想實現什麼? –

+2

你現在在做什麼來解決這個問題?或者真的是這個問題,_「我不知道該怎麼做!」_?差異很重要!順便說一下,高效的意思是什麼? – Rook

回答

2

我可以想到兩種方法可行,但如果可能的話,我仍然建議使用虛擬功能。

答:
有一個指向基類中的函數的指針,並且在派生類的構造函數中將它設置爲指向正確的函數。然後基類可以調用它。但這基本上是在做虛擬功能機制。

B.
在基類中有一個Enum,每個派生類都有一個值,每個派生類將把這個Enum設置爲它自己的值。在Base類中,然後您可以檢查該值並將其轉換爲正確的類並調用正確的函數。但是這是非常糟糕的做法,導致Base類需要知道派生類。

同樣,我不知道是什麼問題導致您不想使用虛擬功能。但我認爲你應該重新考慮它...

+0

+1主要用於最後一句。我想不出有什麼機制不會圍繞你現在所做的工作,而且都遠不如虛擬職能。 – Gorpik

1

使用虛函數和/或(取決於代碼的實際結構)typeid。在大多數情況下,虛擬功能可能是最好的整體解決方案:代碼易讀性,不易發生錯誤等。

相關問題