2011-07-03 10 views
7

代わりは、なぜ我々は、テンプレートを行う必要があります。<クラス/型名> Tだけではなく、テンプレートTの

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

のなぜ我々は行うことはできませんcplusplus.comから

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

プロトタイプの唯一の違いは、 キーワードクラスまたはキーワード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

さらに、3つの可能なテンプレート引数をすべて表示するには、 'template >'も使用してください。 – MSalters

8

テンプレート引数は必ずしも型ではないためです。例えば、std::bitset<size_t N>のように、整数値であるテンプレート引数を持つことができます。