Un membre d'objet peut être un attribut volatile, une propriété standard, un template ou un attribut étendu. Il peut y avoir trois types de propriété standard : boolean, string ou object. La valeur d'une propriété standard peut être :
La valeur d'un template est le résultat de sa conversion (remarquez qu'un template peut être défini par rapport à lui-même, c'est-à-dire de façon récursive).
La valeur d'un attribut étendu peut également être un template, auquel cas elle est convertie. Ceci permet de définir les templates sur une base objet (instance) plutôt que sur une base métaclasse.
Pour éviter les conflits de nom lorsque l'évaluation d'un template s'étend sur plusieurs cibles, il est possible de préfixer à la fois les attributs étendus et les templates par le code de leur cible parent. Par exemple : %Java::strictfp% ou %C++::definition%
Les noms de template peuvent également être préfixés par le nom de leur métaclasse parent. Ceci vous permet d'invoquer un template redéfini, en contournant de fait le mécanisme de résolution de template dynamique. Par exemple : %Classifier::definition%
Vous avez également la possibilité de spécifier une liste de paramètres. Les valeurs de paramètre ne doivent pas contenir de caractères % et être séparées par des virgules. Les paramètres sont transmis sous forme de variables locales @1, @2, @3... définies dans la portée de la conversion du template.
Si le template MyTemplate est défini de la façon suivante :
Parameter1 = %@1% Parameter2 = %@2%
L'évaluation de %MyTemplate(MyParam1, MyParam2)% va produire :
Parameter1 = MyParam1 Parameter2 = MyParam2