PDA

View Full Version : C++ e template


tas
18-03-2003, 13:07
Qual è il vantaggio (se c'è) nell'uso dei templates in C++, rispetto alla programmazione tradizionale (OOP)? Sto leggendo un libro non proprio recente sulla creazione di componenti COM con ATL (Active Template Library), ma credo di non aver capito i concetti di base che stanno dietro a questa libreria! Perchè non usare l'ereditarietà e il polimorfismo, come fa MFC?

cionci
18-03-2003, 13:59
I template permettono di lavorare virtualmente con qualunque oggetto basta che supporti gli operatori che si usano nell'implementazione della classe o della funzione con il template...

#include <iostream>

using namespace std;

template <class T>
void MySwap( T& a, T& b )
{
T c(a);
a = b;
b = c;
}

int main(int argc, char *argv[])
{
int a = 5, b = 10;
cout << a << " " << b << endl;

MySwap<int>(a,b);
cout << a << " " << b << endl;

double aa = 5.22, bb = 10.22;
cout << aa << " " << bb << endl;

MySwap<double>(aa,bb);
cout << aa << " " << bb << endl;

return 0;
}

In questo modo la funzione MySwap può essere utilizzata con qualsiasi tipo di dato...int, float, char, strutture e classi (basta che abbiano il costruttore di copia pubblico)...

Kleidemos
18-03-2003, 14:02
Originally posted by "tas"

Qual è il vantaggio (se c'è) nell'uso dei templates in C++, rispetto alla programmazione tradizionale (OOP)? Sto leggendo un libro non proprio recente sulla creazione di componenti COM con ATL (Active Template Library), ma credo di non aver capito i concetti di base che stanno dietro a questa libreria! Perchè non usare l'ereditarietà e il polimorfismo, come fa MFC?

io ho le idee confuse ..............ma tu + di me!
cionci............rispondi al mio 3d sul libro??


Tnk

cionci
18-03-2003, 14:15
Non lo conosco...

tas
18-03-2003, 15:40
Cionci, nel tuo esempio usi la stessa funzione con due tipi diversi: int e double. Vuol dire che esistono, nel file compilato, due versioni separate della stessa classe? (una per il tipo int e una per il tipo double?). Te lo chiedo perchè mi sembra di aver capito che i template vengono gestiti in fase di precompilazione, giusto?

tas
18-03-2003, 15:55
Originally posted by "Kleidemos"



io ho le idee confuse ..............ma tu + di me!
cionci............rispondi al mio 3d sul libro??


Tnk
Se non avessi avuto le idee confuse non avrei postato sul forum... :rolleyes: E' mia abitudine rispondere ai post di altri utenti solo quando penso di poter dare un aiuto concreto... tu lo fai?

Kleidemos
18-03-2003, 16:40
Originally posted by "tas"


Se non avessi avuto le idee confuse non avrei postato sul forum... :rolleyes: E' mia abitudine rispondere ai post di altri utenti solo quando penso di poter dare un aiuto concreto... tu lo fai?

chiedo skusa:(
Leggi qui cmq:
http://www.sgi.com/tech/stl/

cionci
18-03-2003, 17:16
Sì, in pratica nel file compilato c'è sia MySwap<int>(int &, int &) che MySwap<double>(int &, int &)...

Dal punto di vista della programmazione ci sono notevoli e ovvi vantaggi sulla velocità di scrittura e sulla riutilizzabilità del codice...


Ad esempio la classe vector della STL può essere usata virtualmente con qualsiasi altro tipo di dato...

vector<int> v1;
vector<float> v2;
vector<double> v3;

class c {...};

vector<c> vc;

soalle
18-03-2003, 18:13
Piccolo tip: tra breve dovrebbero fare la loro comparsa i templates (cosidetti generici) anche in Java e .NET (la versione di Java lascia un po' a desiderare ma ci sono già proposte per migliorarla...)

Kleidemos
18-03-2003, 18:16
ho letto sull'ultimo pc professionale l'articolo su questi nel Java e su programazione.it parlano di questo intro in C#..................ma quanto copiano?

soalle
18-03-2003, 18:20
Non ho letto niente a riguardo... mi puoi dare il link della pagina di programmazione...

Comunque è vero che copiano.... in un documento della MS citano e dicono espressamente che la loro soluzione è simile (e naturalmente migliore) di quella di due miei prof dell'uni... questa soluzione dei prof è quella attualmente sotto studio dalla sun per una migliore futura implementazione dei generici... quella attuale (GJ dovrebbe uscire con Java 1.5) di Java fa effettivamente schifo...

Kleidemos
18-03-2003, 18:31
http://www.programmazione.it/index.php?entity=enews&idNews=6144&idArea=1