D Template

Da Andreabont's Wiki.

Il linguaggio D dispone del concetto di template ispirato dal C++, anche se differisce da esso nel suo uso. In D è possibile utilizzare la parola chiave template come se fosse un namespace (che contiene classi, variabili e funzioni da specializzare tramite i parametri del template) oppure è possibile definire una classe che è implicitamente un template.

Template in stile namespace

template MioTemplate(T) {
    T variabile;
}

Che è accessibile per esempio:

MioTemplate!(int).variabile = 2;
writeln(MioTemplate!(int).variabile);

Template di una classe

class Classe(T) {
    T variabile;
}

E' utilizzabile, per esempio:

auto oggetto = new Classe!int;
oggetto.variabile = 2;
writeln(oggetto.variabile);

Calcolo del fattoriale tramite template

Come in C++ è possibile farlo anche in D:

template factorial(int n) {
    const factorial = n * factorial!(n-1);
}

template factorial(int n : 1) {
    const factorial = 1;
}

Utilizzando una funzionalità del D, non presente nel C++ (lo static if) è possibile riscrivere il tutto in un unico template:

template factorial(int n)
{
    static if (n == 1)
        const factorial = 1;
    else
        const factorial = n * factorial!(n-1);
}