C++的模板参数
来源:互联网 发布:淘宝宝贝详情制作 编辑:程序博客网 时间:2024/06/11 18:27
模板的参数分为模板参数和调用参数。
例如:
template <typename T1, typename T2, typename T3>
inline T1 max(const T2 a, const T3 b)
{
//TODO: 代码实现 ...
}
其中,第一行定义了模板参数,第二行定义了模板的调用参数。需要注意的是返回值并不属于模板的调用参数。
下面以实例讲解一下模板参数:
#include<stdio.h>template <typename T> // 只定义一个模板参数。inline T max(const T a, const T b) { return a < b ? b : a; } template <typename T> inline T max1(const T a, const T b) { return a < b ? b : a; } inline int max1(const int a, const int b) { // 为了便于区分,让返回结果+100 return a < b ? b+100 : a+100; } template <typename T1, typename T2, typename T3> // 从左至右定义了三个模板参数。 inline T1 max2(const T2 a, const T3 b) { return a < b ? b : a; } void main(){inti;double d;// 不指定模板参数,隐式实例化模板。虽然没有显示地模板参数,但编译器自动推导出函数模板参数为int。i = max(42, 66); printf("i = %d\n", i);// 如果非模板函数和推导后的模板函数一样,会产生什么结果呢?下面调用的究竟是模板函数还是非模板函数呢?// 实际是这样的,首先查看是否有满足要求的非模板函数,如果没有,再根据参数去匹配并实例化相应的模板函数,所以这里调用的应该是非模板的max1函数。i = max1(42, 66); printf("i = %d\n", i);// 指定模板参数,显示实例化模板。d = max<double>(4, 4.2); printf("d = %f\n", d);// 使用部分缺省的模板参数,不用指定全部的模板参数。如下,从左到右地指定一部分参数,只指定第一个返回参数,即要求返回double类型。// 由于返回参数不属于调用参数,所以必须明确的指出它的类型;而T1和T2属于调用参数,编译器能从函数调用中推导出来。d = max2<double>(4, 4.2); printf("d = %f\n", d);getchar();return;}
0 0
- 混沌 IN C++::模板参数的奥秘
- [C++] 利用模板的模板参数实现单链表
- 模板的模板参数
- C++——函数模板的参数推导
- C++——函数模板的参数推导
- C++ 模板类型参数
- c++-可变参数模板函数
- 模板类型的模板参数
- 表达式参数的模板参数
- C++的模板参数
- 模板参数的推导
- C++ template - 模板的模板参数
- 模板函数的默认模板参数
- 学习C++模板---模板类带简单参数
- 学习C++模板---模板类带简单参数,并且添加缺省参数,特例模板
- 关于模板的类型参数
- 非类型的模板参数
- 模板参数tag的用法
- C++ 虚函数表解析
- mysql 查看索引
- 各种排序
- ubuntu12.04为Firefox安装adobe flash player 方法
- iOS 数独 解法
- C++的模板参数
- Linux shell 的基本命令
- Java 接口“实例化”分析
- 数学建模高级方法(五):RBF神经网络
- 当你对未来迷茫的时候请看看
- 项目3-立体类族共有的抽象类
- How to limit an array of similar hashes to those that have more than one of the same key:value pair
- Oracle SQL 学习(一)
- hadoop备战:hbase的分布式安装经验