Condividi tramite


Creazione di un'istanza esplicita

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

Questo codice istanzia esplicitamente MyStack per le variabili int 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 la funzione membra costruttore:

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

È possibile creare esplicitamente istanze dei modelli di funzione utilizzando un argomento di tipo specifico per dichiararli nuovamente, come illustrato nell'esempio in Creazione di istanze di modelli di funzione.

È possibile utilizzare la parola chiave extern per impedire la creazione di un'istanza automatica 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 utilizzare la parola chiave extern per impedire al compilatore di generare la stessa istanza di codice in più di un modulo oggetto. È necessario creare istanze della funzione del modello utilizzando i parametri di modello specificati espliciti in almeno un modulo collegato se la funzione viene chiamata, o si verifica un errore del linker quando il programma viene compilato.

Nota

La parola chiave extern nella specializzazione si applica solo alle funzioni membro definite all'esterno del corpo della classe.Le funzioni definite all'interno della dichiarazione della classe vengono considerate funzioni inline e vengono sempre istanziate.

Vedere anche

Riferimenti

Modelli di funzioni