// ConsoleApplication20.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "iostream"
using namespace std;
//-- <>尖括号内是模板参数列表,模板参数列表中可以定义 类型参数,在这里T就是类型模板参数
template<typename T>
T addNum(T a, T b){
return a + b;
}
//-- <>尖括号内是模板参数列表,模板参数列表中可以定义 非类型参数,在这里int a, int b就是非类型模板参数
template<int a, int b>
int addNum2(){
return a + b;
}
template<int a, int b, typename K>
inline int addNum3(K k){
return a + b + k;
}
int _tmain(int argc, _TCHAR* argv[])
{
//-- 模板是泛型编程的基础
addNum(1, 2); //--编译器推断类型模板参数
addNum(1.2, 3.2);
//-- 在 <> 内指定模板参数,在这里的非类型模板参数 必须是 常量表达式, 值必须是在编译的时候就能确定,因为实例化模板是在 编译的时候做的事。
cout << addNum2<11, 12>() << endl; //--用户提供 非类型模板参数
//-- 系统会以传进<>的int类型为准,而不是以1000.0推断出来的类型为准
cout << addNum3<2, 3, int>(1000.1) << endl; //--用户提供类型模板参数 和 非类型模板参数
return 0;
}
//-- 函数模板的定义并不会导致编译器生成相关代码,只有在调用这个函数模板时,编译器才会实例化一个特定版本的函数并 生成函数相关代码。
//-- 编译器生成代码的时候,需要能找到模板的函数体部分,所以函数模板的定义通常是放在.h文件中
C++ 基础函数模板、模板的 模板参数列表、模板参数列表中的类型模板参数 与 非类型模板参数
最新推荐文章于 2023-09-17 19:37:00 发布