2016-08-11 162 views
2

我們能否顯式實例化C++模板?C++模板部分顯式實例化

template class <typename T, int N> 
class MyClass { 
    ... 
}; 

template<int N> class MyClass<int, N>; // not meant for specification 
template<int N> class MyClass<float, N>; 

就像我們可以有:

template class <typename T> 
class MyClass { 
    ... 
}; 

template class MyClass<int>; 
template class MyClass<float>; 

回答

5

模板是不是一個類。這是一個模板。 (構建班級的藍圖)。只有在考慮到所有模板參數後才能成爲類。

已經寫了這個(錯別字更正):

template <typename T, int N> 
class MyClass { 

}; 

您可以通過各種手段做到這一點:

template<int N> class MyClass<int, N>; 
template<int N> class MyClass<float, N>; 

但它不是實例化一個模板(因爲這是沒有意義的),也不它實例化一個由該模板形成的具體類。它實際上正在做的是向前宣佈模板的部分專用(可能是無限)子集的存在。

你也可以這樣做:

template<int N> class MyClass<int, N> {}; 
template<int N> class MyClass<float, N> {}; 

這對於<int, [all values of N]><float, [all values of N]>部分專業MyClass

但是,該模板子集仍未實例化。僅限定義爲

要真正實例化一個模板,無論是否部分專用,我們必須命名它,說明所有模板參數。