Creazione di un'istanza esplicita

È possibile utilizzare l'istanziazione esplicita per creare un'istanza di una classe o di una funzione basata su modelli senza utilizzarla nel codice. Poiché è utile quando si creano file di libreria (.lib) che usano modelli per la distribuzione, le definizioni di modello non documentate non vengono inserite in file oggetto (.obj).

Esempi

Questo codice crea in modo esplicito un'istanza MyStack per int le variabili e sei elementi:

template class MyStack<int, 6>;

Questa istruzione crea un'istanza di MyStack senza riservare memoria per un oggetto. Il codice viene generato per tutti i membri.

La riga successiva crea un'istanza solo della funzione membro costruttore:

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

È possibile creare un'istanza esplicita dei modelli di funzione usando un argomento di tipo specifico per redeclare tali modelli, come illustrato nell'esempio nella creazione di istanze del modello di funzione.

È possibile usare la extern parola chiave per impedire la creazione automatica di istanze dei membri. Ad esempio:

extern template class MyStack<int, 6>;

Analogamente, è possibile contrassegnare i membri specifici come esterni e non istanziati:

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

È possibile usare la extern parola chiave per impedire al compilatore di generare lo stesso codice di creazione di istanze in più di un modulo oggetto. È necessario creare un'istanza del modello di funzione usando i parametri di modello espliciti specificati in almeno un modulo collegato se viene chiamata la funzione. In caso contrario, verrà visualizzato un errore del linker quando il programma viene compilato.

Nota

La extern parola chiave nella specializzazione si applica solo alle funzioni membro definite al di fuori del corpo della classe . Le funzioni definite all'interno della dichiarazione della classe vengono considerate funzioni inline e ne viene sempre creata un'istanza.

Vedi anche

Modelli di funzione