2
謝謝你看我 得到了我的書,這個例子,但我不能明白爲什麼線幫助顯式模板especialization
S<void,int> sv; // uses Template at (2)
但
S<void,char> e2;
//uses (1) when im thinking it would use (2) especialization as well
任何人都可以解釋的行爲? btw以下代碼中的所有評論均來自書籍作者
非常感謝!
template<typename T>
class Types {
public:
typedef int I;
};
template<typename T, typename U = typename Types<T>::I>
class S; // (1)
template<>
class S<void> { // (2)
public:
void f();
};
template<> class S<char, char> {}; // (3)
template<> class S<char, 0>; // ERROR: 0 cannot substitute U
int main()
{
S<int>* pi; // OK: uses (1), no definition needed
S<int> e1; // ERROR: uses (1), but no definition available
S<void>* pv; // OK: uses (2)
S<void,int> sv; // OK: uses (2), definition available
S<void,char> e2; // OK: uses (1), definition available
S<char,char> e3; // ERROR: uses (3), but no definition available
}
但對於s任 我只看到especialization對於s 和 {} 和 小號心不是專業化 SV; 使用小號 –
pyralis
2009-06-26 00:07:28