你好,祝你有美好的一天。C++:強制完成模板編譯(MSVC/G ++)
下面的代碼片段在編譯的cl.exe(15.00.30729.01)和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;
}
此外,在cl.exe時你甚至可以像這樣脫身:
template<typename T> class Test{
public:
T t;
void error(){
doesNotExist = 6;//<---- undeclared variable
return doesNotExist;//<---- void function returning result
}
};
現在,這顯然發生,因爲編譯器不會創建模板類的方法的內容,直到有人調用它們。但是,當您設計大型模板類時,這可能會造成問題(因爲您很可能忘記將測試調用添加到新方法的某處)。
的問題是:
是否有g的編譯器開關++或cl.exe時,這將迫使編譯器來處理整個模板(因此,此代碼片段將觸發編譯錯誤)?
是的,顯式模板實例化是你想要的。另請參閱:http://msdn.microsoft.com/en-us/library/by56e477%28VS.80%29.aspx –
對於沒有編譯器錯誤的實際目的很好的解釋。 – iammilind
好的,它的工作原理。我接受你的回答,但沒有必要解釋爲什麼這種方式有效(我已經知道)。謝謝回覆。 – SigTerm