T4 in Visual C++

Marius Bancila, 07.10.2010

Mediu: Visual Studio 2010; Visual Studio 2008

T4, adica Text Template Transformation Toolkit este un generator de code disponibil in Visual Studio 2008 si 2010 (incepand cu editia standard). Acest generator permite crearea de fisiere text pornind de la niste templaturi, folosind C# sau VB.NET ca si limbaj de "scriptare". Din pacate T4 este integrat doar cu VC# si VB.NET, dar nu si cu VC++. Aceasta nu inseamna insa ca nu se pot folosi templaturi T4 in VC++ (desigur scrise fie in C# fie in VB.NET). Mai jos sunt redati pasii necesari pentru a integra T4 in VC++.

Pasul 1: Adaugati un nou fisier text la proiect, modificand extensia din .txt in .tt.

Adauga un nou fisier text
Vezi imaginea la dimenisunea normala



Pasul 2: Selectati fisierul .tt si mergeti la proprietatile sale. Modificati proprietatea Item Type din Does not participate in build in Custom Build Tool, apoi salvati (Apply).

Modifica proprietati fisier
Vezi imaginea la dimenisunea normala



Pasul 3: Dupa Apply apare o noua pagina, Custom Build Tool. Specificati la Command Line calea catre executabilul TextTransform.exe urmata de numele fisierului (e.g. "C:\\Program Files\\Common Files\\Microsoft Shared\\TextTemplating\\10.0\\TextTransform.exe" DemoEnum.tt), iar la Outputs numele fisierului ce va fi generat (e.g. DemoEnum.h). Apoi salvati.

Customizeaza buildul fisierului
Vezi imaginea la dimenisunea normala



Pasul 4: Scrieti un fisier template. Cel din exemplul meu creaza un fisier header care contine un enum simplu.



Compiland acest fisier (comanda Compile din meniul de context pentru fisier) se optine fisierul DemoEnum.h care arata astfel.

#pragma once

typedef enum EnumValues
{
   Value_0,
   Value_1,
   Value_2,
   Value_3,
   Value_4,
   Value_5,
   Value_6,
   Value_7,
   Value_8,
   Value_9,
};

Pasul 5: Pentru a folosi fisierul in proiect il adaug mai intai proiectului. Show All Files in Solution Explorer va afisa toate fisirele. Right click pe DemoEnum.h si Include in Project.



Acum DemoEnum.h se poate folosi in proiect (ca si fisier header, ar fi putut fi folosit si fara a fi inclus in proiect, dar e mai corect asa).

#include "DemoEnum.h"
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])
{
   std::cout << Value_5 << std::endl;
   return 0;
}

Unelte: