我遇到以下設計問題:在定義自定義界面時繼承庫類
我正在爲應用程序使用Qt C++庫。在這個庫中有「模型」類,所有從QAbstractItemModel
繼承(如QAbstractTableModel
,QStandardItemModel
等)。我想從幾個這些類繼承,但是定義他們必須分享的我自己的接口。
我目前這樣做的方式是通過定義的接口(純虛類)並具有繼承的類從該繼承爲好。舉個例子,比方說我想要一個類從QAbstractTableModel
繼承有doSomething
功能:
class MyInterface {
public:
virtual void doSomething() = 0;
}
class MyModel : public QAbstractTableModel, public MyInterface {
...
}
不過,我只是想通過周圍對象爲一QAbstractItemModel
。要使用接口類,我必須將它們轉換爲MyInterface
對象,然後調用這些函數,這會導致在各處投射。此外,如果其他人讓自己的課程從QAbstractItemModel
開始,那麼如果他們不繼承該接口,似乎也有錯誤的餘地。
是否有更好的設計,我可以使用來實現這一切?
爲模板系統知道該對象有doSomething()方法它需要知道這個類是什麼東西比QAbstractTableModel無論如何,只需要QAbstractTableModel指針/引用(例如從Qt函數)是有效的 - 所以這根本不能解決問題 –
MyInterface類根本沒有解決任何問題。甚至在有問題需要解決之前,它很可能會嘗試使用C++的所有功能。 –
這是對我打破的合同的一個好想法。這讓我覺得我應該重新思考我在整個問題上的立場。 – buck