2011-05-19 17 views
6

¿Cuál es la diferencia entre Tuple y TypeTuple? Miré código de muestra en la biblioteca, pero se ven similares. ¿Cómo decido cuál usar? y hay una buena razón por la cual Tuple está en std.typecons pero TypeTuple está en std.typetuple?Tuple vs TypeTuple en D

+0

Tenga en cuenta que estos son soluciones basadas en la biblioteca para propósitos especiales. Se basan en el concepto de tupla incorporada de D's: http://www.digitalmars.com/d/2.0/tuple.html – Trass3r

+0

@ Trass3r, entonces usted dice que hay 3 tipos de tuplas en D? – Arlen

+1

No, acabo de comentar que el * idioma * solo tiene una noción de tuplas. Tuple y TypeTuple que mencionaste están basados ​​en bibliotecas. Por cierto, las tuplas originales se pueden "crear" con 'plantilla DTuple (T ...) {alias T DTuple;}' – Trass3r

Respuesta

4

un Tuple es un tipo de datos, que consiste en una colección de campos que especifique.

Un TypeTuple es simplemente "un montón de cosas" que el compilador sabe acerca en tiempo de compilación; no tiene existencia en tiempo de ejecución.

(Contrariamente a su nombre, una TypeTuple se mantienen prácticamente nada - no sólo los tipos)

+0

Siento tu respuesta y Michal's debería combinarse en una sola. – Arlen

3

tupla std.typecons tupla de valores normal normal.

typetuple en std.typetuple es una tupla de tipos. Se puede usar en tiempo de compilación como en esta función de ejemplo, donde limita los tipos permitidos para funciton a int, long y double only.

void foo (T) (T arg) { 
    static assert staticIndexOf!(T,TypeTuple!(int, long, double)) != -1, 
     T.stringof ~" is not allowed as argument for foo"); 
} 
3

tupla es una colección de variables (como un struct) mientras TypeTuple es una colección de tipo que se puede utilizar en los controles de plantilla

Tuple!(int,"index",real,"value") var; 

define una variable con var.index un int y var .value un verdadero

un TypeTuple se utiliza cuando se desea examinar si las instancias de las plantillas utilizan los tipos correctos