Eine Vorlage ist so etwas wie ein Makro. Wie mit einem Makro verursacht Aufrufen einer Vorlage zu erweitern (mit entsprechenden Parameterersetzung) Code, den Sie geschrieben haben. Allerdings geht eine Vorlage weiter als dies ermöglichen die Erstellung neuer Klassen, die auf der Grundlage von Typen, die Sie als Parameter übergeben. Diese neuen Klassen implementieren typsichere Möglichkeiten, die Operation ausgedrückt in Ihren Vorlagencode.
Vorlagenbibliotheken wie ATL unterscheiden sich von herkömmlichen C++-Klassenbibliotheken, dass sie in der Regel nur als Quellcode (oder als Quellcode mit ein wenig Unterstützung Laufzeit) bereitgestellt werden und sind nicht von Natur aus oder unbedingt hierarchisch in der Natur. Anstatt das Ableiten von einer Klasse, die Funktionalität zu erhalten, die Sie wünschen, instanziieren Sie eine Klasse aus einer Vorlage.