Auswirkungen der Deklaration und Definition der Vorlage

8

Soweit ich weiß, müssen Template-Klassen und Template-Funktionen (größtenteils) in derselben Header-Datei deklariert und definiert werden. Mit dem gesagt:

  1. Gibt es andere Möglichkeiten, eine separate Kompilierung von Vorlagendateien als die Verwendung bestimmter Compiler zu erreichen? Wenn ja, was sind das?

  2. Was, wenn überhaupt, sind die Nachteile der Deklaration und Definition in der gleichen Datei?

  3. Was gilt als Best Practice, wenn es um Template-Deklaration & amp geht; Definition?

Dan 02.02.2010, 16:57
quelle

5 Antworten

11

So organisieren Sie den Vorlagenquellcode

Grundsätzlich haben Sie folgende Möglichkeiten:

  • Machen Sie die Schablonendefinition für den Compiler im Instanziierungspunkt sichtbar.
  • Instanziieren Sie die benötigten Typen explizit in einer separaten Kompiliereinheit, damit der Linker sie finden kann.
  • Verwenden Sie den Keyword-Export (falls verfügbar)
Nemanja Trifunovic 02.02.2010, 17:10
quelle
1

Einer der Nachteile beim Implementieren von Vorlagen in den .h-Dateien besteht darin, dass bei jeder kleinen Änderung der Implementierung der gesamte Code, der die Vorlage verwendet, neu kompiliert werden muss. Es gibt wirklich keinen Weg um dies zu vermeiden, abgesehen davon, keine Vorlagen zu verwenden oder & amp; Definieren Sie sie in der CPP-Datei, in der Sie sie verwenden.

Sie können Vorlagen in einer separaten Datei implementieren und diese Datei dann aus der .h-Datei einschließen. Wie:

templ.h

%Vor%

templ.inc

%Vor%

Meine persönliche Vorliebe besteht darin, Vorlagen direkt in der h-Datei zu implementieren, sofern sie nicht zu groß werden, und dann werde ich sie in h- und inc-Dateien aufteilen.

    
John Dibling 02.02.2010 17:06
quelle
0
  1. Nicht wirklich. Die Definition der Vorlage muss zum Zeitpunkt der Kompilierung verfügbar sein, da Vorlagen in Abhängigkeit von den Vorlagenargumenten, die Sie ihnen geben, instanziiert werden. Aus diesem Grund müssen sie in Kopfzeilen platziert werden, damit der Compiler den Code zum Schreiben einer neuen Instanziierung haben kann. Sie benötigen einen Compiler mit Unterstützung für das Schlüsselwort export.

  2. Die Leute können Ihren Code sehen, wenn das ein Nachteil für Sie ist. Es könnte auch für einige Leute weniger "ordentlich" sein, aber ich denke nicht, dass das ein Problem ist.

gparent 02.02.2010 17:03
quelle
0

Ein weiteres Problem sind die Kompilierzeiten jedes Mal, wenn Sie die .h ändern (besonders wenn sie an vielen Stellen enthalten ist)

    
Patrick 02.02.2010 17:13
quelle
0
  1. Nicht wirklich. Es gibt das export Schlüsselwort, aber die meisten Compiler unterstützen dies nicht . Der einzige Mainstream, den ich kenne, der dies unterstützt, ist der Comeau Compiler.
  2. Wenn Ihre Vorlage Teil einer öffentlichen API ist, geben Sie Ihren Code der Welt bekannt. (Die meisten Leute betrachten dies nicht als ein Problem, aber einige tun es. Es hängt von Ihrem Geschäft ab).
  3. Fügen Sie beide in dieselbe Headerdatei ein.
Glen 02.02.2010 17:01
quelle

Tags und Links