2012-02-29 14 views

Respuesta

7

si utiliza plantillas sí

void foo(A...)(A a){ 
    bar(a); 
} 

void bar(B...)(B b){ 
//... 
} 

la a consigue ampliadas que el tiempo de compilación a qué argumentos se le llamó con

también se puede cortar [] a algunos argumentos, o agregar un argumento la lista

+0

Es un buen truco que no sabía. Desafortunadamente, en mi caso no puedo usar plantillas porque necesito anular esa función en una subclase. Tal vez cambie el diseño. –

+1

@SantiagoV. En D, las funciones variadas se basan en plantillas. Me atrevería a decir que las funciones variadic de estilo C no pueden existir de forma nativa en un lenguaje fuertemente tipado. Siempre podría ajustar sus parámetros en una colección heterogénea de algún tipo, pero tendría que tomar decisiones como la forma de manejar los argumentos perdidos. Además, vea std.tuple para la implementación de la biblioteca estándar de D'(todavía usa plantillas). – Tim

1

Creo que core.vararg puede ser de utilidad.

+0

No, ya lo he comprobado al momento de escribir esta pregunta. core.vararg solo proporciona una interfaz tipo C para varargs. –

Cuestiones relacionadas