Guía de seguimiento dinámico de Solaris

Operador de traducción

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:

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.