编程语言
首页 > 编程语言> > c++变量模板总结

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