你好,祝你有美好的一天。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