In soldoni il codice in questione viene tradotto così' :
Codice PHP:
class FACT_0 {
public:
static int EXEC() {
return 1;
}
};
class FACT_1 {
public:
static int EXEC() {
return 1 * FACT_0::EXEC();
}
};
class FACT_2 {
public:
static int EXEC() {
return 2 * FACT_1::EXEC();
}
};
class FACT_3 {
public:
static int EXEC() {
return 3 * FACT_2::EXEC();
}
};
int main() {
cout << FACT_3::EXEC();
}
Devi pensare alla meta programmazione come a una macro più' potente e typesafe.
Il codice viene generato in fase di compilazione e poi compilato normalmente, ma questo internamente al compilatore, senza alcun preprocessore in mezzo come per le macro in C.
Una volta che quel codice che ho postato di sopra viene mandato al code-generator probabilmente verra' ottimizzato dagli inliner in :
Codice PHP:
int main() {
cout << 6;
}
Non hai la certezza che pero' questo avvenga purtroppo
Ciao