Ciao e buona giornata a te.C++: compilazione completa del modello di forza (MSVC/G ++)
seguente frammento di codice compila il cl.exe (15.00.30729.01) e mingw-g ++ (4.4.0):
template<typename T> class Test{
public:
T t;
void error(){
int doesNotExist = 6;
return doesNotExist;//<---- void function returning result
}
};
int main(int argc, char** argv){
Test<int> test;
return 0;
}
Inoltre, sulla cl.exe si può anche ottenere via con qualcosa di simile a questo:
template<typename T> class Test{
public:
T t;
void error(){
doesNotExist = 6;//<---- undeclared variable
return doesNotExist;//<---- void function returning result
}
};
Ora, questo ovviamente accade perché il compilatore non crea contenuti per i metodi di una classe modello finché qualcuno non li chiama. Tuttavia, questo può creare problemi quando si progetta una classe template di grandi dimensioni (perché è molto probabile che si dimentichi di aggiungere la chiamata di prova al nuovo metodo da qualche parte).
La domanda:
Esiste un'opzione del compilatore per g ++ o cl.exe che costringerebbe compilatore per elaborare intero modello (quindi questo frammento di codice attiverà errore di compilazione)?
Sì, l'istanziazione modello esplicita è ciò che desideri. Vedere anche: http://msdn.microsoft.com/en-us/library/by56e477%28VS.80%29.aspx –
Bella spiegazione dello scopo reale per non avere errore di compilazione. – iammilind
Ok, funziona. Accetto la tua risposta, ma non era proprio necessario spiegare PERCHÉ funziona in questo modo (lo sapevo già). Grazie per la risposta. – SigTerm