Sdílet prostřednictvím


Vytvoření instance šablony třídy

Na rozdíl od šablon funkce, je při vytváření instance šablony třídy nutné explicitně vytvořit instanci třídy zadáním argumentů této šablony třídy.Chcete-li vytvořit instanci třídy TempClass:

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

Kompilátor vygeneruje kód pro šablony třídy nebo funkce při vytváření instance této třídy nebo funkce.Členská funkce je vytvořena, když je zavolána a virtuální členská funkce je vytvořena při vytvoření své třídy.To může způsobit potíže, pokud vytváříte knihovnu se šablonami pro ostatní uživatele.Další informace naleznete v tématu Explicitní vytvoření instance.

Šablona třídy je nejprve určena a poté je vytvořena její instance kompilátorem.Kompilátor nevytvoří instanci šablony třídy, dokud se odkazuje na členy této šablony třídy, je na tuto třídu použit operátor sizeof nebo je vytvořena instance.

Explicitní specializace šablony je upravená verze šablony pro konkrétní typ.

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

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

Explicitní specializace bez template<> vygeneruje chybu.Verze jazyka Visual C++ před přijetím této syntaxe jazykem Visual C++ .NET 2003:

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

Pokud je jednou explicitně vytvořena instance nebo specializace šablony, nemůže být podruhé explicitně vytvořena instance nebo specializace ve stejném programu pro stejnou sadu argumentů šablony.Další specializace s jinými argumenty šablony jsou povoleny.

Pokud pro konkrétní argument šablony neexistuje explicitní vytvoření instance nebo specializace, instance šablony bude implicitně vytvořena v okamžiku, kdy je poprvé použita.

Protože různé instance stejné šablony jsou různé typy, statické členy jedné specializace nebo vytvoření instance šablony jsou odděleny od statických členů jiné specializace nebo vytvoření instance stejné šablony.

Viz také

Referenční dokumentace

Šablony třídy