Sdílet prostřednictvím


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.

Viz také

Referenční dokumentace

Šablony funkcí