I Generics del C# 2.0 e i Template del C++ ISO/IEC 14882

Confronto tra i Generics del C# 2.0 e i Template del C++ ISO/IEC 14882:

 

Generics C# 2.0

Templates C++

Istanziazione

Compile-Time (JIT)

Compile-Time (Preprocessore)

Parametri permessi

Tutti i value-type, i reference-type a meno di array e puntatori unmanaged e i closed costructed type.  Non un altro generic.

Tutti i tipi, non-tipi (espressioni costanti, puntatori a funzioni e mebri, riferimeni, ...) e anche un altro template.

Tipi di default per i parametri

No.

Si.

Parametro usato come classe base 

No.

Si, è possibile usare un parametro per indicare una classe base del template..

Controlli sull'uso dei tipi parametrici

Nel codice dei membri del tipo generico è possibile richiamare solo quei membri  di un type parameter definiti nei sottotipi (classe base, interfaccie) indicati nei constraints.

Nessun vincolo,  se si usano membri di un template parameter non presenti nel tipo specificato si ha un errore a Compile-Time.

Limitazioni alla specializ. dei membri

Non è possibile definire generic methods di tipo: operatori, operatori di conversione, property, indexer, array, events, constructor, destructor e web methods.

Nessuna.

Identità dei tipi istanziati

Identità unica a livello globale: uno stesso generic istanziato da due qualsiasi assembly specificando i medesimi argomenti viene riconosciuto come il medesimo tipo.

L'identità di un tipo istanziato è riconosciuta solo all'interno della stesss compilation-unit (assembly).

Specializzazione

Non è possibile specializzare un generic.

Si, è possibile specializzare un template con le
user-specialization e le partial-specialization.

Duplicazione in memoria del codice

No, in memoria tutte le istanze di uno stesso generic ottenute con parametri reference-type condividono il medesimo codice automaticamente.

Si, ma è possibile evitarlo definendo per un template una
user-specialization per tutti parametri di tipo puntatore.

Informazioni sui tipi a Run-Time

Si, la Reflection supporta i Generics.

No, le RTTI non danno informazioni sui template.

Supporto cross-language

Si, potenzialmente per tutti i linguaggi managed.

No.


Aggiornato il 10-Marzo alle 0:19

Tags :   |

Print | posted @ mercoledì 9 marzo 2005 20:23

Comments on this entry:

Gravatar # re: I bookmark del giorno #9
by Lorenzo Barbieri @ UGIblogs! at 17/05/2005 04:30

Gravatar # re: AOP@Work: serie di articoli da IBM developerWorks sul tema Aspect Oriented Programming.
by Pivello's Blog at 31/05/2005 04:13

Gravatar # re: Generics C# 2.0
by FoxyBlog at 22/06/2005 20:23

Comments have been closed on this topic.