2013-04-27 73 views
1

實現接口我有這樣的接口:通過模板

struct I 
{ 
    virtual void f(int) = 0; 
    virtual void f(float) = 0; 
}; 

我可以使用類似於下一類的東西implemnt I

struct C : public I 
{ 
    template<typename T> 
    void f(T); 
}; 

回答

3

不,你不能這樣做。模板方法重載原來的兩種方法(即它是一個具有相同名稱的不同方法)。 C仍然有兩個純虛函數。

2

正如NPE指出的,你不能直接這樣做。但是,您仍然可以通過代表團避免重複代碼:

struct C : public I 
{ 
    void f(int x) { f_internal(x); } 
    void f(float x) { f_internal(x); } 

private: 
    template<typename T> 
    void f_internal(T x) { do stuff with x; } 
}; 
+0

我已經做了這一點,它看起來有點愚蠢到對模板做的一切,而是因爲我需要實現一些接口有調用模板中的所有功能... – Felics 2013-04-27 13:25:20