skynet ha scritto:
L'idea è semplice: Devi usare una lista. Tu sei l'utilizzatore a chiedi a vari programmatori di fare un contenitore di tipo lista dove le operazioni sono: inserimento/eliminazione/ricerca/stampa ecc.
Più programmatori ti mandano la lista sotto forma di libreria statica (.lib) dove tu non hai il codice ma solo il file header delle funzioni che puoi chiamare. Le funzioni devono essere le stesse, lo svolgimento no. Questo è un esempio che ti può capitare.
L'esempio nella vita reale lo trovi per esempio nel header <list> delle classi STL. Senza divulgare troppo, noi come utilizzatori sappiamo solo le funzioni da chiamare, invece lo svlgimento delle funzioni cambia (anche se non di molto) a seconda di chi ti da il header <list> perche ogni produttore di librerie è libero di svolgerli come vuole ma le funzioni esposte devono eseguire uno standard.
Ciao Skynet, prima di tutto grazie della risposta.
La cosa che mi lascia un po' perplesso è proprio questa, se ho capito.
Io dovrei creare queste due implementazioni di lista ok? Ma se nel progetto dovrò creare una lista di qualsiasi tipo, non sarò vincolato dall'implementazione scelta (tipo la dimensione del vettore)?
O ad esempio questi due metodi:
lista puntatori
template <class L> Cella<L>* Lista<L>::primolista() const
{
return (lista); //dove lista è un puntatore a cella
}
lista vettori:
template <typename T> int lista<T>::primolista() const
{
return (0);
}
Nella prima mi viene restituito un puntatore, mentre nell'altra un intero giusto?
Quindi implementando una lista con puntatori, da qualche parte nel progetto qualche funzione si aspetterò un puntatore, e non un intero... è proprio questo che non riesco a capire... come rendere intercambiabile una cosa del genere?
(ancora una volta, so di non essere stato chiarissimo, ma grazie in anticipo per la risposta!)