非类型模板参数知识点梳理
来源:互联网 发布:网络功能性需求分析 编辑:程序博客网 时间:2024/05/21 17:36
对于函数模板和类模板,模板参数并不局限于类型,普通值也可以作为模板参数。
1. 非类型的类模板
非类型的函数模板参数
非类型的模板参数的限制
非类型的模板参数是有限制的。通常而言,它们可以是常整数(包括枚举类型)或者指向外部链接对象的指针。
浮点数和类对象是不允许作为非类型模板参数的。
例如下面2个模板类是编译不过的:
由于字符串文字是内部链接对象(因为两个具有相同名称但处于不同模板的字符串,是两个完全不同的对象),所以不能使用它们来作为模板实参:
另外,也不能使用全局指针作为模板参数:
然而,可以这样使用:
全局字符数组s由"hello"初始化,是一个外部链接对象。
1. 非类型的类模板
template <typename T, int MAXSIZE>class Stack {private: T elems[MAXSIZE];...};template <typename T, int MAXSIZE>Stack<T, MAXSIZE>::Stack(): numElems(0){}
非类型的函数模板参数
template <typename T, int VAL>T addValue(T const& v){ return x + VAL;}std::transform(v.begin(), v.end(), v.begin(), addValue<int, 5>);};
非类型的模板参数的限制
非类型的模板参数是有限制的。通常而言,它们可以是常整数(包括枚举类型)或者指向外部链接对象的指针。
浮点数和类对象是不允许作为非类型模板参数的。
例如下面2个模板类是编译不过的:
template <double VAT>double process(double v){ return v * VAT;}template <std::string name>class MyClass {...};
由于字符串文字是内部链接对象(因为两个具有相同名称但处于不同模板的字符串,是两个完全不同的对象),所以不能使用它们来作为模板实参:
template <const char* name>class MyClass {...};MyClass<"hello"> x; // error
另外,也不能使用全局指针作为模板参数:
template <const char* name>class MyClass {...};const char* s = "hello";MyClass<s> x; // error
然而,可以这样使用:
template <const char* name>class MyClass {...};extern const char s[] = "hello";MyClass<s> x; // ok
全局字符数组s由"hello"初始化,是一个外部链接对象。
- 非类型模板参数知识点梳理
- 非类型模板参数知识点梳理
- 模板非类型参数
- 非类型模板参数
- 非类型模板参数
- 非类型模板参数
- 非类型模板参数
- 非类型模板参数
- 非类型的模板参数
- 非类型模板类参数
- 非类型函数模板参数
- 函数模板知识点梳理
- 类模板知识点梳理
- 模板之非类型模板参数
- 模板笔记003 - 非类型模板参数
- C++ Templates:非类型模板参数
- STL学习之--非类型模板参数
- 为什么要使用非类型模板参数?
- 软件开发团队的“基础设施”建设
- 类模板知识点梳理
- tomcat和eclipse jdk版本冲突问题
- VC2005-"应用程序正常初始化失败"-0xc0150002(转载)
- Extjs-Flash报表 柱状图
- 非类型模板参数知识点梳理
- 存储过程02
- java 压缩文件zip
- POJ 2524 Ubiquitous Religions
- 非类型模板参数知识点梳理
- DSP之中断总结篇
- [shell] Find必杀技巧(全面撑握find使用)
- 视觉中国潘凡谈MongoDB应用实践
- C++ 写的脚本编译器