Vytváření instance šablony třídy
Na rozdíl od funkce šablony, při vytváření instance šablony třídy musí explicitně vytvořit instanci třídy, tím, že argumenty pro šablony třídy.K vytvoření instance TempClass:
TempClass< float, 6 > test1; // OK
TempClass< char, items++ > test2; // Error, second parameter
// must be constant.
Kompilátor generuje kód pro třídu šablony nebo funkce při vytvoření instance třídy nebo funkce.Členské funkce je vytvořena, když se nazývá a virtuální členské funkce je vytvořena, když se její třídy.Pokud vytváříte knihovnu se šablonami pro ostatní uživatele to může způsobit problémy.Další informace naleznete v tématu Explicitní instance.
Šablona třídy je první specializované a potom vytvořit instanci kompilátorem.Kompilátor nevytvoří instanci šablony třídy, dokud je učiněn odkaz na člena této šablony třídy, sizeof se používá na třídě nebo vytvořena instance.
Explicitní specializace součástí šablony je upravenou verzi š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<> ohlásí chybu.Verze před Visual C++, Visual C++.NET 2003 přijali tuto syntaxi:
// Explicit specialization of X with 'char'
class X<char> // C2906
{
};
Pokud šablona je explicitně vytvořit instanci nebo specializované jednou, nemůže být explicitně vytvořit instanci nebo specializované podruhé ve stejném programu pro stejnou sadu šablon argumenty.Další specializace s jinou šablonu argumenty jsou povoleny.
Pokud není explicitní instance nebo specializace argumentu určité šabloně aplikace, šablona implicitně vytvořené v okamžiku, kdy poprvé použito.
Protože různé implementacím stejné šablony jsou různé typy, statické členy jedné specializace či vytváření instance šablony jsou odděleny od statické členy pro různé specializace nebo instance stejné šablony.