Newsgroup: it.comp.lang.c++
Titolo: L'uso dei typedef

Salve a tutti.
E' vero che in ambito c++ l'uso dei typedef é sconsigliato?
Se si perché.
Grazie

Lancer <pepp...@TOGLIEREtiscali.it> wrote in message
b8e1me$20u$1...@lacerta.tiscalinet.it...

Io ogni tanto li uso e consiglio di usarli. Non troppo però e solo quando
necessario.
Buoni usi ad esempio possono essere per i puntatori a funzione o per
scomporre tipi la cui sintassi è molto complessa (matrici di puntatori a
oggetti definiti dall'utente per dirne una) in altri tipi con una sintassi
più semplice. Ovviamente non usarli per ridefinire un intero, non è solo
superfluo, confonde le idee. Beh forse nel caso della matrice è meglio usare
il tipo matrix, fai prima ed è più sicuro.
I contro invece riguardano un ecccessivo sovrapopolamento dello spazio dei
nomi. Se li usi troppo alla fine rischi di trovarti con decine di sinonimi
poco utili e poco usati.

Lancer wrote:

scusa, ma dove l'hai letto?
In C++, come del resto in C, i typedef sono un ottimo strumento per rendere
il codice piu` leggibile: la stessa libreria standard ne fa largo uso.
ciao Anto
-- 
"Computer science is not about computers any more than astronomy
is about telescopes." -- EW Dijkstra

"Lancer" <pepp...@TOGLIEREtiscali.it> wrote in message
news:b8e1me$20u$1...@lacerta.tiscalinet.it...

Non 'e sconsigliato, ma va utilizzato con accortezza.
Il pasticcio che potrebbe venir fuori con le typedef e' piu' che altro
relativo alla confusione che potrebbe crearsi in fase deallocazione di
array.
Si sa che se si utlizza l'operatore new [] per allocare memoria, occorre poi
deallocarla con l'operatore delete [],
e non "delete".
Ora se noi abbiamo il seguente codice.
typedef  std::string user_info[4];
int main(...)
....
std::string *tUser = new user_info;
......
Chi legge un'allocazione di questo tipo, e non va a smazzarsi gli header per
vedere il tipo di user_info, lo deallochera' con una semplice "delete"...
incorrendo in un "undefined behavior"!
--
Ivan Molella
ICQ: 162760950

 il codice piu` leggibile: la stessa libreria standard ne fa largo uso.
L'accortezza nell' uso delle typedef e' accennato in "Effective c++".

 Se si perché.
La cosa e' piu' complicata.
typedef se usato con accortezza e moderatezza puo' effettivamente rendere il
codice piu' leggibile.
Spesso pero' viene usato male, e rende il codice molto peggiore ;-)
In C era piu' necessario e veniva usato ovunque (anche per semplici structs,
enums etc..).
In C++ questo non e' piu' necessario... ma... dove ritieni che possa
effettivamente rendere il codice piu' chiaro allora e' probabilmente
indicato metterlo.
Quindi sconsigliato non direi... direi usalo con parsimonia dove e solo se
rende le cose migliori. Dove ovviametne questo dipende dai gusti del
programmatore.. c'e' chi lo usera' spesso e chi meno.
Io credo di essere uno di quelli che lo usa solo dove e' nettamente chiaro
che rende le cose piu' leggibili, cioe' non molto spesso.
Tommy

 Se si perché.
Non e' cosi'. Bisogna pero' tenere presente che un typedef e' un
sinonimo di un tipo esistente, e non la definizione di un nuovo tipo.
Questo rende l'utilizzo di typedef come strumento di astrazione
concettuale quanto meno discutibile, ed e' un aspetto che lascia
perplesso chi arriva da linguaggi piu' strettamente imparentati col
Pascal. Tanto per fare un esempio una cosa come
typedef int Mele;
typedef int Pere;
non ha molto senso perche' comunque non mi aiuta ad esprimere il fatto
che non si possono sommare le mele con le pere.
Invece il typedef e' fondamentale per astrarre rispetto a
particolarita' di specifiche piattaforme; ad esempio
#include <climits>
#if INT_MAX <= 32767
typedef Int32 long;
#else
typedef Int32 int;
#endif
potrebbe essere un modo per definire un tipo di intero a 32 bit
compatibile con due ipotetiche piattaforme con int a 16 bit e long a
32 la prima e int a 32 bit e long a 64 la seconda.
Il typedef e' anche fondamentale nella programmazione generica.
Ciao,
Nicola