2017-05-07 88 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. ...

言下之意是,你不能明確實例化的模板與功能區域設置類型。由於顯式模板實例化的意圖是避免重複使用幾個類型的模板的多個實例,例如實例化流類型,所以這個限制不是限制性的。