Utilizzo delle TAG_list

Come abbiamo visto, le TAG_list gestiscono un indice di classi TAG e possono essere inserite ovunque all’interno di un file, che può contenerne più di una; L’esempio che segue mostra una classe generica myclass la cui dichiarazione parziale è la seguente:

class myclass
{
        #define dsize_id L"DocumentSize"   // idi assegnato alla classe

	myclass()
	{
		__select_tag_list(tags)
		__declare_tag(DocumentSize, dsize_id)
	}

	~myclass()
	{

	}

	bool Write(DataFile *fd)
	{
		return tags.Write(fd);
	}

	bool Read(DataFile *fd)
	{
		return tags.Read(fd);
	}

	void generic_func()
	{
		__select_tag_list(tags)
		( (DocumentSize *)__get_tag(dsize_id))->SetSize(1200, 2000, unit_mm);
		......

	}
	
	TAG_list tags;
};

La classe di esempio contiene solo una tag_list e nel costruttore della classe sono state utilizzate due macro:

__select_tag_list utilizzata per selezionare la lista e renderla utilizzabile dalle macro  __declare_tag che seguono

__declare_tag  aggiunge una istanza della classe DocumentSize alla lista; se si dovranno inserire più tag, basterà riutilizzare la macro più volte (non c’è limite al numero di tag inseribili nella lista). Alla fine delle operazioni, avremo generato una lista di tag utilizzabili per la lettura/modifica; se in versioni successive della classe saranno aggiunti nuovi TAG, non sarà necessario ridefinire le funzioni di scrittura e lettura da file, poiché le operazioni saranno completamente gestite dalle funzioni Read e Write della TAG_list.

Nella funzione di esempio generic_func è mostrato l’uso della funzione della classe DocumentSize::SetSize per definire  una dimensione in mm. Come al solito è stata usata la macro __select_tag per selezionare la lista, quindi la macro __get_tag per selezionare l’elemento di nome dsize_id precedentemente allocato nella tag_list.

 

Pages: 1 2 3 4

Leave a Reply

%d bloggers like this:
Skip to toolbar