Le GTL utilise des templates pour générer des fichiers. Un template est un élément de code défini sur une métaclasse PowerAMC définie qui hérite de cette classe. Il peut être utilisé dans différents contextes pour la génération de texte et, éventuellement, de code.
Ces templates peuvent être considérés comme des extensions du métamodèle car ils définissent les classes de métamodèle, ils constituent des types d'attributs de métamodèle particuliers. L'utilisateur peut définir autant de templates qu'il le souhaite pour une métaclasse donnée en utilisant la syntaxe suivante :
<metamodel-classname> / <template-name>
Les templates sont hérités par tous les descendants de la métaclasse pour laquelle ils sont définis. Ce mécanisme est utile pour partager le code de template entre les métaclasses ayant un ancêtre commun. Par exemple, si vous définissez un template pour une classe abstraite telle que BaseObjects, toutes les classes liées via des liens de généralisation à cette classe héritent de ce template.
Le GTL utilise des macros telles que foreach_item, pour permettre l'itération des collections d'objets. Ce template spécifié dans le bloc est converti sur tous les objets contenus dans la collection spécifiée. Le métamodèle fournit des informations très utiles concernant les collections de métaclasses sur lesquelles vous définissez un template contenant une macro d'itération.