C++ 非类型参数的模版实参
来源:互联网 发布:dazzshop知乎 编辑:程序博客网 时间:2024/06/02 06:36
今天看见c++中关于类模版的定义有两种,首先,类模版的定义和声明都以关键字template开头,后面接上以逗号分隔的模版参数表(template parameter list),模版参数表以<>括起来,模版参数一种是类型参数(type parameter),另一种是非类型参数(nontype parameter)。关于类型参数模版不多说了,有关键字class或typename接上后面的标识符构成,例如template<class T> template <typename T>,对于非类型参数模版(nontype parameter)需要注意的是它由普通参数声明构成的,它代表类模版中的一个常量,例如定义template<int a,int b>,这之后就要注意了,给定的非类型参数的表达式必须是一个常量表达式,但是名字空间域的对象的地址可以被用作非类型模版参数的实参,因为名字空间域任何对象的地址是常量表达式(即使不是const定义的),而局部对象的地址不是。例如 template <int a >class A{}; template <int *ptr> class Ap{}; int size=11; const int size_ =12; 则以下的表达式都是可以的 :
A<11> a0;
A<size_> a1;
A<sizeof(size)> a2;
Ap<&size> b0;
值得注意的是,如果一个非类型参数模版的两个表达式的值结果相等,则认为是等价的模版实参,例如Screen<1+2+3,4> s1和Screen<6,2*2> s2认为是引用同一模版实例Screen<6,4>。
指出下面哪些模版的实例化是有效的?
template < int *ptr > class Ptr { ... };
template < class Type, int size > class Fixed_Array { ... };
template < int hi, int wid > class Screen { ... };
(a) const int size = 1024;
Ptr< &size > bp1;
(b) int arr[10]; //www.sctarena.com
Ptr< arr > bp2;
(c) Ptr < 0 > bp3;
(d) const int hi = 40;
const int wi = 80;
Screen< hi, wi+32 > sObj;
(e) const int size_val = 1024;
Fixed_Array< string, size_val > fa1;
(f) unsigned int fasize = 255;
Fixed_Array< int, fasize > fa2;
(g) const double db = 3.1415;
Fixed_Array< double, db > fa3;
A<11> a0;
A<size_> a1;
A<sizeof(size)> a2;
Ap<&size> b0;
值得注意的是,如果一个非类型参数模版的两个表达式的值结果相等,则认为是等价的模版实参,例如Screen<1+2+3,4> s1和Screen<6,2*2> s2认为是引用同一模版实例Screen<6,4>。
指出下面哪些模版的实例化是有效的?
template < int *ptr > class Ptr { ... };
template < class Type, int size > class Fixed_Array { ... };
template < int hi, int wid > class Screen { ... };
(a) const int size = 1024;
Ptr< &size > bp1;
(b) int arr[10]; //www.sctarena.com
Ptr< arr > bp2;
(c) Ptr < 0 > bp3;
(d) const int hi = 40;
const int wi = 80;
Screen< hi, wi+32 > sObj;
(e) const int size_val = 1024;
Fixed_Array< string, size_val > fa1;
(f) unsigned int fasize = 255;
Fixed_Array< int, fasize > fa2;
(g) const double db = 3.1415;
Fixed_Array< double, db > fa3;
- C++ 非类型参数的模版实参
- C++ 非类型参数的模版实参
- 非类型模版参数
- C++ 非类型模版参数
- 非类型形参的模板实参
- 非类型形参的模板实参
- 模板类型实参和非类型实参的使用 ----- 基于模板的函数指针的使用
- 引用类型实参和非引用类型实参对于字符串可能存在的问题
- 关于c++内部链接和非类型模版参数的限制
- 关于模版的实参推演
- 类模板中非类型参数的模板实参
- STL提取参数模版的类型
- 非类型的模板参数
- C语言基础 实参与形参的类型一致
- 模版实参的推断和引用
- 非类型模板参数的限制
- 模板非类型参数
- 非类型模板参数
- SIP 学习 (4) --- PJLIB-UTIL
- VC中将SOCKET类的connect函数设置为非堵塞
- SIP 学习 (5) --- PJSIP
- pjsip 编译
- javascript求众数
- C++ 非类型参数的模版实参
- VC++自绘界面
- VS2010+Opencv-2.4.0的配置攻略
- socket.io的helloworld
- CreateProcess函数使用
- C++ SendMessage函数的一些使用方法
- _tsplitpath函数用法
- C++获取文件大小等信息
- C++获取当前程序路径