[英]template class - member function specialization
這是一個示例代碼:
template<class T>
class A
{
public:
A(T t): x(t){}
T getX();
private:
T x;
};
template<class T>
T A<T>::getX()
{
return x;
}
// member function specialization
template<> // works with and without template<>
long A<long>::getX()
{
return 1000L;
}
上面的代碼在成員函數特化之前使用和不使用模板<> 。 為什么? 在這種情況下有什么區別?
Edit1:我以這種方式使用該模板(VS 2012 編譯器):
A<int> a1(1);
cout<<a1.getX()<<endl;
A<long> a2(1);
cout<<a2.getX()<<endl;
不合規,不合規。
FWIW, GCC 4.8 拒絕沒有template <>
代碼。
你的編譯器要么有問題,要么有擴展支持; 我可以確認 MSVS 2012 接受代碼。 我聽說 MSVS 2013 年 11 月 CTP 也毫無怨言地吃掉了它。 公平地說,Visual Studio 對模板規范總是相當寬容。
[C++11: 14.7/3]:
可以為函數模板、類模板、類模板的成員或成員模板聲明顯式特化。template<>
引入了顯式特化聲明。 [..]
此規則的唯一例外是:
[C++11: 14.7.3/5]:
[..]顯式專用類模板的成員以與普通類成員相同的方式定義,並且不使用template<>
語法。 [..]
……但這不適用於這里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.