2014-09-02 2 views
6

Angenommen, ich habe:Speichermodell der Template-Funktion in Nicht-Template-Klasse?

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

Ich weiß, dass der Compiler ein class A<T> für jeden unterschiedlichen T im Code definiert generieren.

Was, wenn ich:

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

Wäre nur eine Definition von class B aber mehrere Überlastungen von f() für jede unterschiedliche T dort sei es mit genannt wird?

+1

Ja. Was könnte es sonst sein? –

+3

Om Assembly level Es gibt keine Klassendefinitionen. Jede Klassenmethode wird mit dem versteckten Parameter "this" zur globalen Funktion kompiliert. Die modellierte Funktion wird für jede instanziierte Art in jeder Kompilierungseinheit zur globalen Funktion kompiliert. –

+0

Mögliche Duplikate? [Klasse mit Template-Funktion, ist die gleiche Klasse?] (Http://stackoverflow.com/questions/11121910/class-with-templated-member-function-is-the-same-class) –

Antwort

1

Ja, mit jeder Instanz von f<T> wird eine vom Compiler generierte f() Definition erstellt.
Je nach Compiler kann der f() durch Inlining optimiert werden oder er kann nur so viel Speicherplatz im Codesegment erhalten.

Allerdings bin ich selten auf diese Art von Design gestoßen, wo Sie eine nicht-statische Template-Member-Funktion (ohne irgendein Argument!) Innerhalb einer Nicht-Template-Klasse haben.

Verwandte Themen