Sdílet prostřednictvím


Explicitní vytvoření instance

K vytvoření instance z šablony třídy nebo funkce bez jejího použití v kódu je možné použít explicitní vytvoření instance. Vzhledem k tomu, že je užitečné při vytváření souborů knihovny (.lib), které používají šablony pro distribuci, nejsou definice šablon vložené do objektů (.obj) souborů.

Příklady

Tento kód explicitně vytvoří MyStack instanci proměnných int a šesti 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 instanci členské funkce konstruktoru:

template MyStack<int, 6>::MyStack( void );

Šablony funkcí můžete explicitně vytvořit pomocí konkrétního argumentu typu, který je předefinuje, jak je znázorněno v příkladu vytvoření instance šablony funkce.

Pomocí klíčového extern slova můžete zabránit automatickému 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 );

Klíčové slovo můžete použít extern k tomu, aby kompilátor vygeneroval stejný kód instance ve více než jednom objektovém modulu. Pokud je funkce volána, musíte vytvořit instanci šablony funkce pomocí zadaných explicitních parametrů šablony v alespoň jednom propojeném modulu. Jinak se při vytváření programu zobrazí chyba linkeru.

Poznámka

Klíčové extern slovo v specializaci se 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 instance jsou vytvořeny vždy.

Viz také

Šablony funkcí