El operador de D xlate se usa para traducir una expresión de entrada en una de las estructuras de salida de traducción definidas. El operador xlate se usa en una expresión con la forma:
xlate < output-type > ( input-expression )
Por ejemplo, para ejecutar el traductor hipotético para la estructura FILE definida anteriormente y acceder al miembro file_fd, debería escribir la expresión:
xlate <struct file_info *>(f)->file_fd;
donde f es una variable de D del tipo FILE *. La expresión xlate en sí misma se asigna al tipo definido por output-type. Una vez que se define un traductor, se puede usar para traducir expresiones de entrada en un tipo de estructura de salida del traductor o en un puntero para la instrucción.
Si traduce una expresión de entrada en una estructura, podrá dejar de hacer referencia a un miembro concreto de la salida de forma inmediata usando el operador “.”. También puede asignar la estructura traducida entera a otra variable D para hacer una copia de los valores de todos los miembros. Si un único miembro deja de hacer referencia, el compilador D sólo generará código correspondiente a la expresión para dicho miembro. Si lo desea, puede no aplicar el operador & a una estructura traducida para obtener su dirección, puesto que el objeto de datos en sí no existe hasta que se copia o hasta que se hace referencia a uno de sus miembros.
Si traduce una expresión de entrada en un puntero en una estructura, podrá dejar de hacer referencia a un miembro concreto de la salida de forma inmediata usando el operador ->, o también puede hacer que el puntero deje de hacer referencia usando el operador unario *, en cuyo caso, el resultado actúa como si tradujera la expresión en una estructura. Si un único miembro deja de hacer referencia, el compilador D sólo generará código correspondiente a la expresión para dicho miembro. Si lo desea, puede dejar sin asignar un puntero traducido a otra variable D, dado que el objeto en sí no existe hasta que se copia o hasta que se hace referencia a uno de sus miembros y, en consecuencia, no se puede dirigir a él.
Una declaración de traductor puede omitir expresiones para uno o varios miembros del tipo de salida. Si se usa una expresión xlate para acceder a un miembro para el que no se ha definido una expresión de traducción, el compilador D generará un mensaje de error adecuado e interrumpirá la compilación del programa. Si se copia el tipo de salida entero mediante una asignación de estructura, cualquier miembro para el que no haya definidas expresiones de traducción se cumplimentará con ceros.
Para encontrar un traductor coincidente para una operación xlate, el compilador D examina el conjunto de traductores disponibles en el siguiente orden:
En primer lugar, el compilador busca traducir el tipo exacto de expresión de entrada en el tipo exacto de salida.
En segundo lugar, el compilador resuelve los tipos de entrada y de salida siguiendo cualquier alias typedef en los nombres de tipos subyacentes y, a continuación, busca traducir el tipo de entrada resuelto en el tipo de salida resuelto.
En tercer lugar, el compilador busca una traducción de un tipo de entrada compatible a un tipo de salida resuelto. El compilador usa las mismas reglas que se emplean para determinar la compatibilidad de los argumentos de llamada de función con los prototipos de función, con el objetivo de determinar si un tipo de expresión de entrada es compatible con un tipo de entrada del traductor.
Si no se encuentra un traductor coincidente en función de estas reglas, el compilador D genera un mensaje de error adecuado y la compilación del programa falla.