Estratto del documento

=>

Programmazione generica e STL

RIASSUNTO CAPITOLO 6 PROGRAMMAZIONE LIBRO

La programmazione generica è uno degli s3li di programmazione supporta3 dal C++

che consiste nella scri8ura di algoritmi e stru8ure da3 in termini di 3pi che vengono

specifica3 come se fossero una specie di parametri.

Questo è par3colarmente u3le in quanto mol3 algoritmi e stru8ure da3 sono

indipenden3 dai 3pi di da3 su cui si operano e nel caso del C++ è par3colarmente

interessante perché è un linguaggio che usa un controllo dei 3pi sta3co, cioè

controlla i 3pi delle variabili al momento della compilazione anziché a run-3me.

La programmazione generica bene o male consente di evitare parzialmente questo

controllo visto che il 3po viene passato come parametro del codice.

- 6.2: template

I template sono il costru8o del C++ alla base della programmazione generica e

consentono di generare versioni mul3ple del codice a8raverso la parametrizzazione

dei 3pi di da3, consentendo di scrivere codice generico indipendentemente dal 3po

mantenendo la 3pizzazione del linguaggio dato.

In C++ abbiamo due 3pi di template:

1. Funzioni template: funzioni speciali in grado di operare su 3pi generici.

2. Classi template: classi che hanno membri, sia a8ribu3 che metodi, che usano i

parametri del template come 3pi.

3. Variabili template (a par3re dal C++14).

Esa8amente come le classi generiche, anche quelle template supportano il

meccanismo di ereditarietà. A livello sintaQco si scrive template <template-

argument-list>.

Gli argomen3 della lista indicano i parametri di 3po usa3 nel codice e sono della

forma typename T, dove T è il marcatore usato nel codice sos3tuito dal 3po passato

come parametro del template.

Al posto della scri8ura typename si può usare anche la scri8ura class, ma è meno

consigliata in quanto rende meno chiaro l’intento di passaggio del nome di un 3po.

- 6.2.1: funzione template

Sono funzioni che usano, oltre i parametri normalmente usa3 nelle funzioni, i

parametri template per i 3pi e hanno lo scopo di passare dei 3pi come parametri.

In alcuni casi il codice generico deve avere degli ada8amen3 speciali per qualche

3po così che la specializzazione non venga applicata per essi ma si usa una versione

par3colare.

La sintassi usa una lista vuota dei parametri di 3po e la specializzazione del 3po dopo

il nome della funzione, così come si specializza il 3po quando si invoca.

- 6.2.2: classi template

Sono classi che possono avere membri che usano i parametri del template come 3pi.

Tu8avia, a differenza delle funzioni template, l’istanziazione di una classe template

deve essere sempre esplicita.

Questo vuol dire che il compilatore genererà una classe diversa per ogni 3po per cui

è richiesta la specializzazione, sos3tuendo ad ogni parametro del template il 3po

specificato.

È importante, inoltre, che il compilatore sappia applicare una poli3ca di istanziazione

su richiesta per i metodi, ossia il codice viene generato solo per i metodi

effeQvamente invoca3. Se il metodo di una classe non viene mai invocato per una

specializzazione il suo codice non sarà mai compilato.

Esa8amente come le funzioni, anche le classi template possono essere specializzate

per fornire varian3 specifiche per un qualche 3po per il quale la generazione del

codice da un template non sarebbe appropriata. A livello sintaQco, la sintassi è la

stessa delle funzioni.

- 6.2.3: parametri template

Esa8amente come i parametri usa3 nelle funzioni, i parametri template possono

avere dei parametri di default in modo tale da semplificare l’uso dei template.

L’uso di parametri template con argomen3 di default è molto comune nella libreria

standard del C++ e se un template ha tuQ valori di default può essere istanziato

senza fornire alcun parametro.

1. Parola chiave template: questa parola chiave può essere usata in mol3 altri

contes3 oltre che nella dichiarazione di funzioni e classi template come, ad

esempio, la specifica dei nomi dei 3pi, che in C++ possono essere di 3po

qualificato o non qualificato.

Nel caso dei template i nomi possono essere dipenden3 o non dipenden3

secondo se hanno una dipendenza rispe8o al parametro del template.

La parola chiave typename indica al compilatore che il nome seguente deve

essere interpretato come un 3po; dunque, quando scriviamo template

<typename T> vogliamo indicare al compilatore che nel codice template T

indica un 3po.

Se il 3po è un nome qualificato che coinvolge l’uso di un parametro template

si deve usare typename; in caso contrario, se non si usa typename, i nomi

qualifica3 e dipenden3 non devono essere interpreta3 come 3pi, nonostante

questo por3 a un errore di sintassi.

- 6.2.5: requisi3 implici3

Per quanto riguarda i requisi3 implici3 del codice template, ques3 diventano

eviden3 solo al momento della compilazione per una determinata specializzazione.

InfaQ, il codice template potrebbe lavorare solo per alcuni 3pi e non per altri.

Nel caso delle classi, alcuni metodi sono compilabili per mol3 o tuQ i 3pi mentre

altri possono essere compila3 solo per alcuni.

- 6.2.6: organizzazione del codice

A differenza della “normale programmazione” in C++, dove funzioni e classi vengono

dichiarate nel file header e vengono successivamente implementate nel file

sorgente, il codice template dev’essere presente solo nel file header.

Questo perché il compilatore ha bisogno di avere sia la dichiarazione che la

definizione per poter produrre la specializzazione.

- 6.2.7: external template

L’istanziazione di un template è generata quando il templat

Anteprima
Vedrai una selezione di 4 pagine su 12
Appunti riassuntivi Programmazione (parte 4, programmazione generica e STL e RAII e smart pointer) Pag. 1 Appunti riassuntivi Programmazione (parte 4, programmazione generica e STL e RAII e smart pointer) Pag. 2
Anteprima di 4 pagg. su 12.
Scarica il documento per vederlo tutto.
Appunti riassuntivi Programmazione (parte 4, programmazione generica e STL e RAII e smart pointer) Pag. 6
Anteprima di 4 pagg. su 12.
Scarica il documento per vederlo tutto.
Appunti riassuntivi Programmazione (parte 4, programmazione generica e STL e RAII e smart pointer) Pag. 11
1 su 12
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Sarina24 di informazioni apprese con la frequenza delle lezioni di Programmazione e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Firenze o del prof Marco Bertini.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community