Un modèle est un peu comme une macro. Comme avec une macro, invoquant un modèle provoque à développer (avec la substitution de paramètre approprié) au code que vous avez écrit. Cependant, un modèle va plus loin que cela afin de permettre la création de nouvelles classes basée sur les types que vous transmettez en tant que paramètres. Ces nouvelles classes de mise en œuvre de moyens de type sécurisé d'effectuer l'opération exprimée dans le code de votre modèle.
Bibliothèques de modèle comme ATL diffèrent des bibliothèques de classes C++ traditionnels en ce qu'ils sont généralement fournis uniquement en tant que code source (ou sous forme de code source avec un peu, en soutenant le moment de l'exécution) et ne sont pas intrinsèquement ou nécessairement hiérarchiques dans la nature. Plutôt que de dériver d'une classe pour obtenir la fonctionnalité que vous le désirez, vous instanciez une classe à partir d'un modèle.