2011-07-03 62 views
7

代替爲什麼我們必須做模板的<class /類型名稱>的T,而不是僅僅型板T

template <typename T> 
void func(T arg) {/* something */} 

爲什麼我們不能做

template <T> 
void func(T arg) {/* something */} 

從cplusplus.com:

原型之間的唯一區別是使用 關鍵字類或關鍵字typename。 其用法不明確,因爲 表達式具有完全相同的 含義和行爲完全相同的方式 方式。

這對我來說似乎是不必要的樣板。

回答

11

http://www.cplusplus.com/doc/tutorial/templates/請參閱模板的非類型參數部分。

您需要一些關鍵字來區分類型參數和非類型參數。

template <class T, int N> 
class mysequence { 
    T memblock [N]; 
    public: 
    void setmember (int x, T value); 
    T getmember (int x); 
}; 
+0

甚至可以使用'template >'來顯示所有三種可能的模板參數。 – MSalters

8

因爲模板參數並不總是類型。例如,您可以擁有一個不可或缺的模板參數,例如std::bitset<size_t N>

相關問題