View Full Version : C++ e template
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?
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, 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?
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/
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;
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?
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
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.