biowep
20-10-2014, 18:57
Salve,
ho dei dubbi riguardo la metaprogrammazione.
Prendiamo ad esempio questo codice, che non sono sicuro al 100% sia metaprogrammazione (perché l'ho modificato usando del codice trovato)
#include <iostream>
using namespace std;
template<int i>
class FACT {
public:
static int EXEC() {
return i * FACT<i - 1>::EXEC();
}
};
template<>
class FACT<0> {
public:
static int EXEC() {
return 1;
}
};
int main(void) {
cout << FACT<3>::EXEC();
}
Io dichiaro una funzione EXEC in una classe template ed una funzione omonima nella stessa famiglia di classi template specializzata con il valore 0.
Volevo sapere come funziona esattamente.
In particolare: so che le istruzioni metaprogrammate vengono eseguite a compile time, ma questo significa che posso usare qualsiasi istruzione? Ad esempio il return, che valore ha se eseguito a compile time, ha lo stesso effetto?
Nell'esempio, quale è l'esatto codice che si ottiene nel main una volta analizzato il metaprogramma?
La dichiarazione template<int i>, non dovrebbe essere una specializzazione di un template esistente? Cioè dichiarare prima un template<typename T> con del codice generico e poi quello con del codice speciale?
Perché non posso testare direttamente nella funzione della classe template il valore di i.
if (i>0);
ho dei dubbi riguardo la metaprogrammazione.
Prendiamo ad esempio questo codice, che non sono sicuro al 100% sia metaprogrammazione (perché l'ho modificato usando del codice trovato)
#include <iostream>
using namespace std;
template<int i>
class FACT {
public:
static int EXEC() {
return i * FACT<i - 1>::EXEC();
}
};
template<>
class FACT<0> {
public:
static int EXEC() {
return 1;
}
};
int main(void) {
cout << FACT<3>::EXEC();
}
Io dichiaro una funzione EXEC in una classe template ed una funzione omonima nella stessa famiglia di classi template specializzata con il valore 0.
Volevo sapere come funziona esattamente.
In particolare: so che le istruzioni metaprogrammate vengono eseguite a compile time, ma questo significa che posso usare qualsiasi istruzione? Ad esempio il return, che valore ha se eseguito a compile time, ha lo stesso effetto?
Nell'esempio, quale è l'esatto codice che si ottiene nel main una volta analizzato il metaprogramma?
La dichiarazione template<int i>, non dovrebbe essere una specializzazione di un template esistente? Cioè dichiarare prima un template<typename T> con del codice generico e poi quello con del codice speciale?
Perché non posso testare direttamente nella funzione della classe template il valore di i.
if (i>0);