類別樣板執行個體化
樣板函式具現化類別樣板時,您必須明確具現化類別藉由類別樣板的引數。 若要建立的執行個體TempClass:
TempClass< float, 6 > test1; // OK
TempClass< char, items++ > test2; // Error, second parameter
// must be constant.
當執行個體化的類別或函式時,編譯器會產生樣板類別或函式的程式碼。 呼叫,並在建構它的類別時,虛擬成員函式具現化時,會執行個體化的成員函式。 如果您要建立範本,以便其他使用者的程式庫,這會造成問題。 如需詳細資訊,請參閱明確具現化。
類別樣板是第一次進行特製化,然後由編譯器執行個體化。 參考到這個範本類別的成員、 sizeof 適用於類別,或在建立執行個體之前,編譯器就不會執行個體化類別樣板。
樣板的明確特製化是範本的自訂某特定類型的版本。
// template_instantiation2.cpp
template<class T> class X
{
};
// Explicit specialization of X with 'int'
template<> class X<int>
{
};
int main()
{
}
明確特製化,而不template<>就會產生錯誤。 在 Visual C++ 之前的 Visual C++ 的版本。NET 2003 可接受這種語法:
// Explicit specialization of X with 'char'
class X<char> // C2906
{
};
如果範本是明確具現化,或一次進行特製化,它無法明確具現化或特製化的一組相同的樣板引數的相同程式中的第二次。 允許具有不同的樣板引數的進一步特製化。
如果沒有明確具現化或特製化做特定的樣板引數,將會隱含地產生樣板第一次使用的點。
不同的執行個體化,同一範本的是不同的型別,因為一個特製化或樣板具現化的靜態成員會是有別於不同的特製化或同一個樣板具現化的靜態成員。