在c++98中,模板的實參型別有限制,即區域性型別和匿名型別不能作為模板實參。
1 template class編譯結果如下:x{};
2 template void
tempfun(t t){}
3struct
a{} a;
4struct b; //
b是匿名型別變數
5 typedef struct b; //
b是匿名型別67
void
fun() c; //
c是區域性型別
9 xx1;
10 xx2;
11 xx3;
12tempfun(a);
13tempfun(b);
14tempfun(c);
15 }
可以看到,使用c++98編譯時,區域性型別,匿名型別都無法作為模板實參,這些限制都是沒有任何意義的,所以c++11作了改進,以上**在c++11中編譯是ok 的。
C 11 區域性和匿名型別作模板實參
c 11支援區域性的型別和匿名型別做模板的實參 在c 98中,標準對模板實參的型別還有一些限制。具體地講,區域性的型別和匿名的型別在c 98中都不能做模板類的實參。而在c 11標準中,支援做模板的實參。示例如下 1 templateclass x 2 templatevoid tempfun t t...
非型別引數的模板實參
類模板引數也可以是乙個非型別模板引數。例如 templateclass screen private string screen string size type cursor short height short width typedef screen 24,80 termscreen term...
非型別形參的模板實參
模板形參不必都是型別。在呼叫函式時非型別形參將用值代替,值的型別在模板列表中指定。例如,下面的函式模板宣告了array init是乙個含有乙個型別模板形參和乙個非型別模板形參的函式模板。函式本身接受乙個形參,該形參是陣列的引用。模板非型別形參是模板定義內部的常量值,在需要常量表示式的時候,可使用非型...