這有點棘手,但我會盡我所能解釋它。促進這種情況下的代碼重用
我正在製作遊戲的Gui API,它有主題。
首先我將解釋小工具是如何工作的。
一個按鈕,例如,從Widget繼承。 主題工作類似。
ButtonTheme繼承自WidgetTheme。
每個窗口小部件類中都有一個它的corrosponding Theme實例。
Widget類有:
private:
static WidgetTheme widgetTheme;
public:
static WidgetTheme& getWidgetTheme();
按鈕類有:
private:
static ButtonTheme buttonTheme;
public:
static ButtonTheme& getButtonTheme();
Widget的構造,從主題前建立本身:
Widget()
{
setFont(getWidgetTheme().getFont());
}
按鈕,從WidgetTheme繼承,必須做同樣的事情,因爲內部的小部件不知道從ButtonTheme構造,所以我的按鈕結束不得不這樣做:
Button()
{
setFont(getButtonTheme().getFont());
setButtonPadding(getButtonTheme().getButtonPadding());
}
這是我的問題所在。我真的覺得不對,我必須重新提供所有的WidgetTheme,並將它們重定向到ButtonTheme的Widget參數。如果我不這樣做,SuperButton會繼承Button的樣式,它也會繼承Widget的樣式,但是我想要的是SuperButton使用它的ButtonTheme和WidgetTheme版本,因爲SuperButtonTheme會繼承ButtonTheme和WidgetTheme。
有沒有一種方法可以重新設計這個,這樣構造函數只需要設置它帶來的主題的一部分,而不必設置它的父母的部分?
感謝
假設所有主題功能都是虛擬的。 – Dialecticus 2010-12-08 22:31:46