Der D-Operator xlate dient zum Übersetzen eines Eingangsausdrucks in eine der definierten Ausgangsstrukturen. Der Operator xlate wird in Ausdrücken der folgenden Form verwendet:
xlate < Ausgangstyp > ( Eingangsausdruck )
Um beispielsweise den zuvor definierten hypothetischen Übersetzer für FILE-Strukturen aufzurufen und auf die Komponente file_fd zuzugreifen, würden Sie folgenden Ausdruck schreiben:
xlate <struct file_info *>(f)->file_fd;
wobei f eine D-Variable des Typs FILE * ist. Dem xlate-Ausdruck selbst wird der durch Ausgangstyp definierte Typ zugewiesen. Ein fertig definierter Übersetzer ermöglicht es, nicht nur die Eingangsausdrücke in den Ausgangsstrukturtyp des Übersetzers, sondern auch in Zeiger auf diese Struktur zu übersetzen.
Wenn Sie einen Eingangsausdruck in eine Struktur übersetzen, können Sie entweder direkt mit dem Operator „.” eine bestimmte Komponente der Ausgabe dereferenzieren oder die gesamte übersetzte Struktur einer anderen D-Variable zuweisen, um eine Kopie der Werte aller Komponenten anzulegen. Wenn Sie eine einzelne Komponente dereferenzieren, generiert der D-Compiler nur für den Ausdruck dieser Komponente Code. Es ist nicht möglich, durch Anwendung des Operators & die Adresse einer übersetzten Struktur abzurufen, da das Datenobjekt selbst so lange nicht existiert, bis es kopiert oder eine seiner Komponenten referenziert wird.
Wenn Sie einen Eingangsausdruck eines Zeigers in eine Struktur übersetzen, können Sie entweder direkt mit dem Operator -> eine bestimmte Komponente der Ausgabe dereferenzieren oder den unären Operator * anwenden, um den Zeiger zu dereferenzieren. In diesem Fall verhält sich das Ergebnis so, als würden Sie den Ausdruck in eine Struktur übersetzen. Wenn Sie eine einzelne Komponente dereferenzieren, generiert der D-Compiler nur für den Ausdruck dieser Komponente Code. Es ist nicht möglich, einen übersetzten Zeiger einer anderen D-Variable zuzuweisen, da das Datenobjekt selbst so lange nicht existiert, bis es entweder kopiert oder eine seiner Komponenten referenziert wird. Deshalb kann es nicht adressiert werden.
In Übersetzerdeklarationen dürfen Ausdrücke für eine oder mehr Komponenten des Ausgangstyps ausgelassen werden. Wird über einen xlate-Ausdruck auf eine Komponente zugegriffen, für die kein Übersetzungsausdruck definiert ist, gibt der D-Compiler eine geeignete Fehlermeldung aus und bricht die Programmkompilierung ab. Wird mithilfe einer Strukturzuweisung der gesamte Ausgangstyp kopiert, werden alle Komponenten, für die keine Übersetzungsausdrücke definiert sind, mit Nullen angefüllt.
Auf der Suche nach einem passenden Übersetzer für eine xlate-Operation untersucht der D-Compiler die verfügbaren Übersetzer in dieser Reihenfolge:
Erstens: Der Compiler sucht eine Übersetzung aus dem genauen Ausdrucks-Eingangstyp in den genauen Ausgangstyp.
Zweitens: Der Compiler löst die Ein- und Ausgangstypen auf, indem er alle typedef-Aliasnamen bis zu den zugrunde liegenden Typnamen verfolgt, und sucht dann eine Übersetzung aus dem aufgelösten Eingangs- in den aufgelösten Ausgangstyp.
Drittens: Der Compiler sucht eine Übersetzung aus einem kompatiblen Eingangstyp in den aufgelösten Ausgangstyp. Dabei geht der Compiler nach denselben Regeln wie beim Ermitteln der Kompatibilität von Funktionsaufrufargumenten mit Funktionsprototypen vor und stellt fest, ob der Eingangstyp eines Ausdrucks mit dem Eingangstyp eines Übersetzers kompatibel ist.
Kann im Einklang mit diesen Regeln kein passender Übersetzer gefunden werden, gibt der D-Compiler eine entsprechende Fehlermeldung aus und die Programmkompilierung schlägt fehl.