2014-09-02 13 views
6

Supponiamo che io sono:Modello di memoria della funzione modello all'interno della classe non modello?

template <typename T> 
class A 
{ 
    //Do something with T 
}; 

So che il compilatore genererà un class A<T> per ogni diversa T definita nel codice.

Che cosa succede se ho:

class B 
{ 
    template <typename T> 
    void f() { /* Do something with T */ } 
}; 

Ci sarebbe solo una definizione di class B ma più sovraccarichi di f() per ogni diversa T si chiama con?

+1

Sì. Cos'altro potrebbe essere? –

+3

Livello di assemblaggio Om non ci sono definizioni di classe. Ogni metodo di classe è compilato alla funzione globale con il parametro nascosto "questo". La funzione basata su modelli viene compilata sulla funzione globale per ogni tipo di istanza, in ogni unità di compilazione. –

+0

Possibile duplicato? [Classe con funzione membro basata su modello, è la stessa classe?] (Http://stackoverflow.com/questions/11121910/class-with-templated-member-function-is-the-same-class) –

risposta

1

Sì, con ogni istanziazione di f<T> ci sarà una definizione di f() generata dal compilatore.
A seconda del compilatore, il f() potrebbe essere ottimizzato a causa di inlining o può solo acquisire molto spazio nel segmento di codice.

Tuttavia, raramente mi sono imbattuto in questo tipo di progettazione in cui si dispone di una funzione membro del modello non statico (senza alcun argomento!) All'interno di una classe non modello.

Problemi correlati