區域性和匿名型別作模板實參

2022-08-11 11:45:11 字數 612 閱讀 8084

在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是乙個含有乙個型別模板形參和乙個非型別模板形參的函式模板。函式本身接受乙個形參,該形參是陣列的引用。模板非型別形參是模板定義內部的常量值,在需要常量表示式的時候,可使用非型...