c++变量模板总结
作者:互联网
一:定义,泛化,全特化,偏特化,使用方法
#include <iostream>
#include <boost/type_index.hpp>
using namespace std;
//变量模板的泛化版本
template <typename T> //(1)
T g_tmp{};//变量的零初始化方式
//变量模板的全特化,,这里的char可以和int不一样
template<>//(2)
char g_tmp<float>{'a'};
//变量模板的偏特化,从参数范围上的偏特化,必须要求是T*,依赖于T
template<typename T>//(3)
T g_tmp <T*>{10};
//变量模板的偏特化,从参数范围上的偏特化,必须要求是T*,依赖于T
template<typename T>//(4)
T g_tmp <const T*>{100};
int main()
{
/*
变量模板:Variable Templates,c++14引入,一般写在.h文件当中
从感觉上,变量模板与函数模板有些类似,看起来象一个没有参数,但是有返回值的函数模板*/
//变量模板的,泛化,偏特化,以及全特化和使用
g_tmp<int> = 20;
std::cout << g_tmp<int> << std::endl;
g_tmp<float>;
std::cout << g_tmp<float> << std::endl;
g_tmp <int*>;
std::cout << g_tmp<int*> << std::endl;
g_tmp <const int*>;
std::cout << g_tmp<const int*> << std::endl;
return 0;
}
二:变量模板默认模板参数
#include <iostream>
#include <boost/type_index.hpp>
using namespace std;
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=c762929e4bb64018adb8d4c7c7907512.png)
//变量模板,默认模板参数
template <typename T = int>
T g_tmp{};//变量的零初始化方式
int main()
{
g_tmp<int> = 5;
g_tmp<> = 15;
printf("%p,%d\n", &g_tmp<int>, g_tmp<int>);
printf("%p,%d\n", &g_tmp<>, g_tmp<>);
return 0;
}
三:非类型模板参数
#include <iostream>
#include <boost/type_index.hpp>
using namespace std;
//变量模板,非类型模板参数
template <typename T, int value>
T g_tmp[value]{};//变量的零初始化方式
int main()
{
for (int i = 0; i < 15; i++)
{
g_tmp<int, 15>[i] = i; //g_tmp<int, 15>出现就代表定义了g_tmp[value]这么一个数组
}
for (int i = 0; i < 15; i++)
{
std::cout << g_tmp<int, 15>[i] << '\t';
}
return 0;
}
四:变量模板的另一种形式
五:成员变量模板
标签:tmp,std,变量,int,c++,模板,特化 来源: https://blog.csdn.net/qq_38158479/article/details/121067301