2013-04-18 31 views
0

我目前正在學習C++模板,有些東西我不明白。到目前爲止,我明白,如果你有以下的通用類使用模板

template <class T> class A{ 
     ... 
    } 

爲客戶提供一流的專業化具體,譬如說int對象,您可以定義如下:

template<> class A<int>{ 
     ... 
    } 

不過,我有已經看到類似下面的情況:

原始類,

template <class T, int Size> class buffer{ 
     ... 
    } 

那麼對於int類型的對象speciliazed類,

template <int Size> class buffer<int, Size>{ 
     ... 
    } 

我很困惑,爲什麼int的特化是不是以下:

template<> class bufffer<int, int Size>{ 
     ... 
    } 

能有人請解釋。

回答

0

buffer模板有兩個模板參數。第一種是類型參數,因爲它以class開頭,第二種是非類型參數,因爲它以int開頭。

你所看到的只是第一個參數的部分專業化。請注意,模板特化的模板參數完全獨立於原始模板的模板參數(這是我在學習時弄混淆的主要事情之一)。例如,它會工作一樣好:

template <int N> class buffer<int, N> { ... }; 

它基本上是給了時buffer的第一個模板參數是類型int,二是一些int值專業化。

無論何時以template <>(空括號)開始,這是一個明確的特化,您可以在其中指定全部模板參數。例如,你可以這樣做:

template <> class buffer<int, 1> { ... }; 

這將是在第一個模板參數是int類型,第二是價值1專業化。

+0

這很有道理! – Adeeb