Newsgroup: it.comp.lang.c++
Titolo: Cosa sono i template?

... ed in particolare qual'è o quali sono gli utilizzi?
Premetto che "lavoro" con il builder c++ anche se sto vedendo qualcosa 
anche in java.

 ... ed in particolare qual'è o quali sono gli utilizzi?
RTFM
Kiuhnm

 ... ed in particolare qual'è o quali sono gli utilizzi?
erano cavalieri il cui scopo era proteggere il santo sepolcro.
si chiamavano appunto "cavalieri templati".
-- 
  Maurizio Loreti    
ROT13:ybe...@cq.vasa.vg
    |  (@_
Un. of Padova, Dept. of Physics, Padova, Italy  |  //\
 
http://www.pd.infn.it/~loreti/mlo.html
      |  V_/_

 
Veramente quelli erano i TemplaRi...
:-)
--
Roal Zanazzi

 
Meta-programmazione e codice generico.
Niente che non sia scritto su un buon libro sul C++.
--
Roal Zanazzi

 :-)
Wooosh!
Quello era il rumore della battuta, passandoti sopra.
Saludos
Adriano

 ... ed in particolare qual'è o quali sono gli utilizzi?
Si tratta di scrivere classi e funzioni che lavorino con tipi diversi, a 
patto che i tipi previsti come possibili argomenti supportino tutti 
alcune proprietà comuni (sommabilità e/o relazione d'ordine, per 
esempio, oppure dereferenziabilità...).
IMHO sono insidiosi, proprio perchè tipi diversi SONO diversi, anche 
quando hanno proprietà comuni, ergo personalmente ne faccio a meno. 
Chiamatemi pure troglodita, se volete, ma...

 Chiamatemi pure troglodita, se volete, ma...
Per principio, dovresti fare a meno anche dell'ereditarietà (A e B::A 
sono diversi, anche se hanno proprietà comuni...).
Attualmente ho alcune righe di codice che vanno riscritte per ogni 
"operatore" e ho notato che mi "metto pensiero" ad aggiungere nuovi 
operatori o modificarne di già esistenti.
E' alienante scrivere codice altamente ridondante. Però è necessario in 
questo caso perché sono i cicli interni delle routine che gestiscono 
trasparenze, blending, ecc... nel motore grafico.
Ho deciso di generare il codice tramite i template.
Pensa che, per es.,
typedef t_list< <r0, op1, s0, d0, d1>,
                 <r0, op2, s0, d0>,
                 <r1, op1, s2, d2> > op_data;
dovrà generare ben 300 righe di codice.
La funzione più semplice generata è
Multi_Op::BitMap32 Multi_Op::getResMap(Ta &t) const
{
     return ( ( ((t.sMap & s0 == s0) && (t.dMap & (d0 | d1)) == (d0 | 
d1)) ||
         ((t.sMap & s0 == s0) && (t.dMap & d0) == d0) ) ? r0 : 0)
                |
         ( ((t.sMap & s2 == s2) && (t.dMap & d2) == d2) ? r1 : 0);
}
Non è alienante dover scrivere roba del genere?
Ben vengano i template.
Kiuhnm

                 <r1, op1, s2, d2> > op_data;
Ovviamente non sarà proprio così :-)
Kiuhnm


... ma tra template e interfacce (quelle di cui si parla in java) sono 
la stessa cosa (con nomi diversi) o sono cose tra loro totalmente diverse?

 la stessa cosa (con nomi diversi) o sono cose tra loro totalmente diverse?
completamente diverse. Le interfacce Java corrispondono grosso modo a
classi base virtuali con solo funzioni membro virtuali pure.
I template corrispondono piu' o meno ai generici del Java moderno, ma
sono piu' potenti.
Ciao,
Nicola Musatti

 Quali sono le caratteristiche dei template che contrastano con la OOP?
Nessuna. Si tratta di una forma di polimorfismo ortogonale a quella
ottenibile tramite ereditarieta' e funzioni membro virtuali.
Ciao,
Nicola

 trasparenze, blending, ecc... nel motore grafico.
Questa soluzione l'ho gia' vista... =) ma la vera domanda e': Ti stai 
veramente scrivendo un engine software nel 2006?
--*PaN!* 

 veramente scrivendo un engine software nel 2006?
Sě.
Kiuhnm

 wrote in message 
news:4586d8b4$0$4255$4faf...@reader1.news.tin.it...

E' bello sapere che c'e' ancora qualche pazzo al mondo =)
Buon divertimento =)
--*PaN!*
www.spinningkids.org

 Ben vengano i template.
Vero č anche, certo, che io non sento la necessitą di usarli.

 Vero è anche, certo, che io non sento la necessità di usarli.
Comunque ho appena scoperto che forse (oggi provo) posso realizzare la 
stessa cosa anche senza template.
Kiuhnm

 stessa cosa anche senza template.
Macché! Il compilatore ha solo isolati "lampi di genio".
Ho scritto una funzione dove tutti i cicli e gli if possono essere 
eliminati a compile time e il compilatore non ha semplificato un bel 
niente. Bene: il lavoro che ho fatto con i template non č stato tempo 
buttato.
Kiuhnm

 anche per un palazzo?
Non e' "polimorfismo ortogonale", ma "forma di polimorfismo" ortogonale
rispetto all'ereditarieta'. I template sono una forma di polimorfismo
statico, ovvero la differenziazione avviene in fase di compilazione,
mentre l'ereditarieta' e' una forma di poliformismo dinamico, ovvero la
differenziazione puo' avvenire a runtime. Template ed ereditarieta'
possono essere composti in una notevole varieta' di modi.
Ciao,
Nicola

 
... fin qui può bastare!
Ti ringrazio per le delucidazioni!
ByBy

 RTFM
   ...
so che ognuno di voi è self-made.
ma che senso ha creare forum, gruppi di discussione, quando la risposta
nel 90% dei casi è: leggiti un manuale.

 nel 90% dei casi č: leggiti un manuale.
servono per chiarire i dubbi che ti vengono *dopo* esserti
letto il manuale, non per sostituire il manuale
;-)
e per condividere l'esperienza di ognuno :-)
Ciao!

 nel 90% dei casi è: leggiti un manuale.
perche' senza leggere, rileggere e ripetere il tutto fino a capire i
fondamenti del linguaggio non ha senso voler pensare di programmare.
