码迷,mamicode.com
首页 > 编程语言 > 详细

C++11 局部和匿名类型作模板实参

时间:2020-01-24 09:24:22      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:c++   实参   code   div   bsp   family   type   turn   示例   

【1】C++11支持局部的类型和匿名类型做模板的实参

在C++98中,标准对模板实参的类型还有一些限制。

具体地讲,局部的类型和匿名的类型在C++98中都不能做模板类的实参。

而在C++11标准中,支持做模板的实参。示例如下:

 1 template<typename T> class X {};
 2 template<typename T> void TempFun(T t) {};
 3 
 4 struct A { } a;
 5 struct { int i; } b;              // b是匿名类型变量
 6 typedef struct { int i; } B;      // B是匿名类型
 7 
 8 void fun()
 9 {
10     struct C {} c;      // C是局部类型
11 
12     X<A> x1;            // C++98通过 C++11通过
13     X<B> x2;            // C++98错误 C++11通过
14     X<C> x3;            // C++98错误 C++11通过
15 
16     TempFun(a);         // C++98通过 C++11通过
17     TempFun(b);         // C++98错误 C++11通过
18     TempFun(c);         // C++98错误 C++11通过
19 }

但是,需要注意的是,虽然匿名类型可以被模板参数接受,如下写法是不可以的:

1 template <typename T> 
2 struct MyTemplate {};
3 
4 int main() 
5 {
6     MyTemplate<struct { int a; } > t;  // 无法编译通过,匿名类型的声明不能在模板实参位置
7     return 0;
8 }

 

good good study, day day up.

顺序 选择 循环 总结

C++11 局部和匿名类型作模板实参

标签:c++   实参   code   div   bsp   family   type   turn   示例   

原文地址:https://www.cnblogs.com/Braveliu/p/12231805.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!