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.