2014-03-19 53 views
1

對於有多個模板函數的類沒有模板必須包含在每個聲明如下所示:是否需要爲每個模板函數聲明模板<typename T>?

class Foo 
{ 
    public: 
     template <typename T> 
     void foo(T a); 

     template <typename T> 
     void bar(T b); 
} 

或者你也可以包括template <typename T>的第一個聲明,如下所示:

class Foo 
{ 
    public: 
     template <typename T> 
     void foo(T a); 
     void bar(T b); 
} 

我懷疑只有第一個是有效的,因爲沒有;它使我認爲如果寫在一行上的聲明實際上是template <typename T> void foo(T a)。我認爲它的公約將它分成兩行!尋找確認。

+3

正確的。在第二個例子中,'foo'是一個模板函數,'bar'不是。 – Anthony

回答

2

template說明符必須出現在每個模板化函數之前。您的第二個示例將導致T對於bar不是公認的類型,因爲template <typename T>在這種情況下僅適用於foo

另外,如果你想使用各項功能的同類型中的一類,你可以將整個類聲明爲模板:

template <typename T> 
class Foo 
{ 
public: 
    void foo(T a); 
    void bar(T b); 
}; 
相關問題