Udostępnij za pośrednictwem


Tworzenie wystąpienia szablonu klasy

W przeciwieństwie do funkcji szablonów, podczas utworzenia wystąpienia szablonu klasy należy jawnie utworzyć wystąpienie klasy przekazując argumenty dla szablonów klas.Aby utworzyć wystąpienie TempClass:

TempClass< float, 6 > test1;       // OK
TempClass< char, items++ > test2;  // Error, second parameter 
                                   // must be constant.

Kompilator generuje kod szablonu klasy lub funkcji, kiedy tworzy wystąpienia klasy lub funkcji.Funkcja członkowska jest uruchomiona, gdy jest nazywana a wirtualna funkcji członkowska jest uruchomiona, gdy jest konstruowana w swojej klasie.Może to powodować problemy, jeśli tworzysz biblioteki z szablonami dla innych użytkowników.Aby uzyskać więcej informacji, zobacz Jawne tworzenie wystąpienia.

Szablon klasy jest najpierw specjalizowany i następnie przez kompilator tworzone jest wystąpienie.Kompilator nie tworzy wystąpienia szablonu klasy do momentu utworzenia odwołania do członka tej klasy szablonu, używany w klasie jest rozmiar lub tworzone jest wystąpienie.

Jawna specjalizacja szablonu jest dostosowaną wersją szablonu dla określonego typu.

// template_instantiation2.cpp
template<class T> class X
{
};

// Explicit specialization of X with 'int'
template<> class X<int>
{
};
int main()
{
}

Jawna specjalizacja bez template<> powoduje wygenerowanie błędu.Wersje Visual C++, Visual C++ .NET 2003 przyjmują następującą składnię:

// Explicit specialization of X with 'char'
class X<char> // C2906
{
};

Jeśli szablon jest jawnie utworzony lub raz wyspecjalizowany, to nie może być jawnie utworzony lub specjalizowany po raz drugi w tym samym programie dla tego samego zestawu argumentów szablonu.Dalsze specjalizacje z różnymi argumentami szablonów są dozwolone.

Jeśli nie ma jawnego wystąpienia lub specjalizacji dla argumentu określonego szablonu, szablon zostanie niejawnie utworzony w momencie, gdy jest po raz pierwszy użyty.

Ponieważ różne wystąpieniami tego samego szablonu są różnych typów, elementy statyczne dla jednej specjalizacji lub wystąpienia szablonu są niezależne od elementów statycznych dla różnych specjalizacji lub wystąpień tego samego szablonu.

Zobacz też

Informacje

Szablony klas