D 演算子 xlate は、入力式を定義済みの翻訳出力構造へ翻訳するときに使用します。xlate 演算子の使用形式は、次のとおりです。
xlate < output-type > ( input-expression )
たとえば、先ほど定義した FILE 構造体のトランスレータを呼び出し、file_fd メンバーにアクセスしたい場合は、次のような式を作成します。
xlate <struct file_info *>(f)->file_fd;
f は FILE * 型の D 変数です。xlate 式そのものには、output-type で定義された型が割り当てられます。トランスレータの定義後は、このトランスレータを使って、入力式を出力構造型またはこの構造型のポインタへ翻訳できます。
入力式を構造体に翻訳する場合は、演算子「.」を使って、特定の出力メンバーを間接参照するか、翻訳済みの構造体全体を別の D 変数に割り当てて、すべてのメンバーの値のコピーを作成するかします。単一のメンバーを間接参照する場合、D コンパイラは、そのメンバーの式に対応するコードしか生成しません。翻訳済みの構造体に & 演算子を適用して、そのアドレスを取得することはできません。というのも、コピーが作成されるか、いずれかのメンバーが参照されるまで、データオブジェクト自体が存在しないからです。
入力式を構造体のポインタに翻訳する場合は、演算子「->」を使って、出力の特定メンバーを間接参照するか、単項演算子「*」を使ってポインタを間接参照するかします。後者の場合、式を構造体に翻訳した場合と同じ結果が得られます。単一のメンバーを間接参照する場合、D コンパイラは、そのメンバーの式に対応するコードしか生成しません。翻訳済みのポインタを別の D 変数に割り当てることはできません。というのも、コピーが作成されるか、いずれかのメンバーが参照されるまで、データオブジェクト自体が存在しないからです。存在しないデータオブジェクトにアドレスを指定することはできません。
トランスレータ宣言では、1 つ以上の出力型のメンバーの式を省略できます。たとえば、xlate 式を使って、翻訳式が定義されていないメンバーにアクセスしようとすると、D コンパイラからエラーメッセージが返され、プログラムのコンパイルが中止されます。構造体の割り当てによって出力型全体をコピーした場合、翻訳式が定義されていないメンバーはゼロで初期化されます。
xlate 操作に適したトランスレータを見つけ出すため、D コンパイラは、使用可能なトランスレータを次の順番でチェックします。
まず、コンパイラは、入力式の型から出力型への翻訳を探します。
次に、コンパイラは、配下の型名の型付きの別名に従って、入力型と出力型の「解決」を行います。その後、解決済み入力型から解決済み出力型への翻訳を探します。
その次に、コンパイラは、互換性のある入力型から解決済みの出力型への翻訳を探します。コンパイラは、関数呼び出しの引数と関数のプロトタイプの互換性について判断するときと同じ規則に従って、入力式の型とトランスレータの入力型に互換性があるかどうかを判断します。
これらの規則に基づいて一致するトランスレータが見つからない場合は、D コンパイラからエラーメッセージが出力され、プログラムのコンパイルが失敗します。