2012-06-25 98 views
3

(遺憾的模糊標題)「基類」模板?

我有各種派生類D1,D2基類B等

此外我有一個模板

template <class T> Storage; 

現在,每個派生的類有不同版本的存儲類的

class D1 : public class B { 
    Storage<int> *myStorage; 
    void action1(); 
    void specific_D1_action(); 

    // other stuff... 
} 

class D2 : public class B { 
    Storage<float> *myStorage; 
    void action1(); 
    void specific_D2_action(); 

    // other stuff... 
} 

D1::action1()D2::action1()使用他們respec tive myStorage並具有完全相同的代碼。但是,各自的myStorage對象的實際模板參數不同。

對於所有版本的存儲, 是否可以有一種「基類」,以便我可以在基類B(而不是D1,D2,...)中定義myStorage和action1以避免代碼複製?

我想我不能「模仿」基類B,因爲派生類中的具體操作。

(本例中非常簡化 - 在真實情況下,模板的參數是複雜的類)

+0

很難說出你想要的。如果你在'specific_Dx_action'中發佈了一些你期望的代碼,這將會有所幫助。 –

+0

'class D1:public class B'?看到你的代碼,似乎你需要先學習C++的基本語法。 – Nawaz

+0

「我想我不能」模仿「基類B,因爲派生類中的具體操作」,爲什麼?檢查下面的答案,你可以應用B上的模板並擺脫DerivedBase? – PermanentGuest

回答

8

創建從B基類繼承,並採取了模板參數基類?

class B 
{ 
    // ... 
}; 

template<typename T> 
class DerivedBase : public B 
{ 
    Storage<T> *myStorage; 
    void action1(); 
}; 

class D1 : public DerivedBase<int> 
{ 
    void specific_D1_action(); 
}; 

class D2 : public DerivedBase<float> 
{ 
    void specific_D2_action(); 
}; 
+0

謝謝Joachim - 我不知道你可以從實例化模板派生 – user1479670

+0

@ user1479670:實例化模板是一個完整的類型,並且可以用於一種類型可以使用的所有東西。 – sbi

+0

typedef在這裏非常有用,特別是如果你打算將它們放入其他模板。 –