考慮我有一系列派生類例如以下所列:繼承和成員函數
class A
{
...
}
class B1 : public A //there may be many B's here say, B2, B3 etc
{
...
}
class C1 : public B1 //may be more C's as well
{
...
}
我想把所有在單個容器中的對象的,因此,所有的將類型類A
的。
假設我想爲類C1
添加一個函數,那麼最好的方法是什麼?我的選擇是在基類A
中引入它,並在C1
中寫入所需的實現,或者,我可以在C1
中引入它並進行動態轉換以訪問它。哪一個是首選?動態鑄造是否太昂貴? (我的主要約束是運行時間。我在基類中有一個標誌來指示它是什麼類型的派生對象,因此我不必動態地轉換容器中的每個對象。是否將不必要的函數添加到基類會導致?在惡劣的指令高速緩存使用)
沒有人能告訴你動態鑄造是否「太貴」,因爲你可以負擔得起的是主觀的。由於這看起來就是你所追求的(「我的主要約束就是運行時間」),我會建議這樣做,並對結果進行基準測試,看看它是否對於特定的硬件和編譯器優化和用例來說太昂貴,外部限制和... – Altainia
使接口太廣泛是糟糕的設計,因此是向下廣播,您可能需要一個指向更多特定接口的額外集合。 – imreal
您可以使用具有訪問者模式的「變體」。 – AndyG