2017-05-07 60 views
2

我有一些玩具代码如下:明确模板实例

#include <iostream> 

using namespace std; 
template<typename T> 
class MyClass{ 
    T t; 
}; 
template class MyClass<int>; 
int main() 
{ 
    //template class MyClass<int>; 
    return 0; 
} 

和:

#include <iostream> 

using namespace std; 
template<typename T> 
class MyClass{ 
    T t; 
}; 
//template class MyClass<int>; 
int main() 
{ 
    template class MyClass<int>; 
    return 0; 
} 

template class MyClass<int>;的main()函数没有work.The错误里面的错误: 'template'之前预期的主表达式 但main()函数外的相同语句起作用。为什么会发生这种情况?

+3

敢问,后者的重点是什么?我的意思是,有没有*理由*你认为你需要这个? – WhozCraig

+0

甚至试图将显式实例化的范围限制为单个函数还有什么意义? – cdhowie

+0

我正在阅读David Vandevoorde的C++模板:完整的指南6.2.1。我偶然在main()函数内写入了'template class MyClass '。没有特别的原因 – rara

回答

2

我倒是觉得在14.7.2这一说法[temp.explicit]第3款意味着明确模板实例必须出现在命名空间范围:

... An explicit instantiation shall appear in an enclosing namespace of its template. ...

言下之意是,你不能明确实例化的模板与功能区域设置类型。由于显式模板实例化的意图是避免重复使用几个类型的模板的多个实例,例如实例化流类型,所以这个限制不是限制性的。