2011-06-06 110 views
1

我想知道是否有可能是任何方式寫在抽象類的模板功能,並將它(模板函數)自動派生類的類型實例?抽象類通過模板化的虛函數訪問已實現的類型?

所以,你有一個類,它看起來像這樣

class A 
{ 
    virtual template < typename T> 
    void vtfunc(void) 
}; 
class B : public A 
{ 
    /// No declared members pertaining to this example 
} 

然後,每當從A派生的類被聲明,它編譯「vtfunc」本身作爲模板參數T. 然後,調用vtfunc ()通過A的接口調用該函數編譯其派生類B.

的isntance是否有這樣做,或者寫東西fiddley有這種效果的方法嗎?

顯然我知道模板參數可能隻影響類的內部,而不是返回類型和參數 - 他們將需要是因爲這樣的多態性的作品一樣。

回答

2

我不知道你在做什麼之後,但一個共同的模式是所謂的curiously recurring template pattern;在這裏,基類本身就是模板,而不是它的成員函數。換句話說:

template <typename T> 
class A 
{ 
    virtual void vtfunc(void) 
}; 

class B : public A<B> 
{ 
    … 
}; 
+1

爲真正的多態性添加另一個超類'A'。 :) – Xeo 2011-06-06 16:22:36

+0

Woop!真棒回答謝謝,我並沒有真的認爲這是可能的。儘管Xeo說,我需要在A之上再創建一個類,所以這個多態性實際上可以被使用。 – deek0146 2011-06-06 16:32:26

1

請考慮使用非成員函數。