Explicitní vytvoření instance
Je možné použít explicitní vytvoření instance pro vytvoření instance z šablony třídy nebo funkce bez jejího použití v kódu.Vzhledem k tomu, že to je užitečné při vytváření souborů knihovny (.lib), které používají šablony pro distribuci, definice šablon bez instancí nejsou vloženy do souborů objektů (.obj).
Tento kód explicitně vytvoří MyStack pro proměnné int a šest položek:
template class MyStack<int, 6>;
Tento příkaz vytvoří instanci MyStack bez rezervace jakéhokoli úložného prostoru pro objekt.Kód je vygenerován pro všechny členy.
Další řádek explicitně vytvoří pouze členskou funkci konstruktoru:
template MyStack<int, 6>::MyStack( void );
Je možné explicitně vytvořit instanci šablon funkce použitím specifického typu argumentu pro jejich znovu deklarování, jak je uvedeno v příkladu Vytváření instancí šablon funkce.
Lze použít klíčové slovo extern pro zabránění automatického vytváření instancí členů.Příklad:
extern template class MyStack<int, 6>;
Podobně lze označit konkrétní členy jako externí a bez instance:
extern template MyStack<int, 6>::MyStack( void );
Lze použít klíčové slovo extern pro zabránění kompilátoru v generování stejného kódu instance pro více než jeden modul objektů.Pokud je volána funkce, je nutné vytvořit instanci šablony funkce použitím explicitně zadaných parametrů šablony v alespoň jednom propojeném modulu, jinak bude při sestavování programu vyvolána chyba propojovacího programu.
[!POZNÁMKA]
Klíčové slovo extern se ve specializaci vztahuje pouze na členské funkce definované mimo tělo třídy.Funkce definované uvnitř deklarace třídy jsou považovány za vložené funkce a jsou vždy vytvořeny.