c++变量模板总结

2023-11-10

一:定义,泛化,全特化,偏特化,使用方法

#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;

//变量模板,默认模板参数
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;
}

四:变量模板的另一种形式

#include <iostream>
#include <boost/type_index.hpp>
using namespace std;

//变量模板,另一种表现形式
template <typename T>
struct B
{
	const static T value = { 160 }; //const也可以写成constexpr,{}也可以不加,注意是静态成员变量
};

template <typename T>
int g_tmp = B<T>::value; //注意g_tmp是个变量模板
int main()
{
	cout << g_tmp<int> << endl; //160,g_tmp<int>相当于B<int>::value

	printf("%p\n", &g_tmp<int>);
	printf("%p\n", &B<int>::value);

	g_tmp<int> = 152;
	cout << g_tmp<int> << endl; //152
	//cout << B<int>::value << endl; //160
	
	return 0;
}

五:成员变量模板

#include <iostream>
#include <boost/type_index.hpp>
using namespace std;

template <typename T>
class TMP
{
public:
	template <typename U>
	//U m_i = {}; 只可以使用静态成员变量
	static U m_i;
};

template <typename T>
template <typename U>
U TMP<T>::m_i = 10;

int main()
{
	TMP<int>::m_i<int> = 100;
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++变量模板总结 的相关文章

随机推荐

  • 华为ensp模拟校园网/企业网实例(XX学校网络设计与实现)

    目录 1 网络需求分析 1 1 功能需求分析 1 2 技术需求分析 1 3 网络安全需求分析 2 校园局域网设计 2 1 拓扑图 2 2 IP 规划和 VLAN 划分 2 3 核心层设备配置 2 3 2 ospf配置 2 3 3 ACL访问
  • STM32编译报错

    今天将STM32CUBEMX进行整理编译后报错 charge shelf charge shelf axf Error L6200E Symbol SystemInit multiply defined by system stm32f4x
  • 量化投资学习-16:从波粒二象性和叠加原理看股票的三面:市场面、基本面、技术面

    市场上股票的运行走向千奇百样 但通过分析 其实每只股票都有其内在的相似的运行规律 以下 根据光波的波粒二象性和叠加性原理 通过图示的方式展现这种内在走势的共同规律 基本面是股票的核心 决定了股票的长期的价值回归点 这就是股票的粒子性上 市场
  • QTextEdit如何获取鼠标点击位置的行列值和行内容

    QTextEdit如何获取鼠标点击位置的行列值和行内容 void MainWindow on textEdit cursorPositionChanged int row col QTextCursor cursor QString str
  • 一个完整的机器学习项目实战代码+数据分析过程:哈佛大学能耗预测项目(Prediction of Buildings Energy Consumption)

    目录 哈佛大学能耗预测项目 背景介绍 数据采集 探索性数据分析 预测模型 机器学习方法 总结和结论 项目资料获取 https download csdn net download github 38486975 11120922 其他获取方
  • C++通过命令参数读文件

    老师奇奇怪怪的 要求 数据文件名通过命令参数的方式提交给应用程序 数据文件名不能写在程序中 在网上搜了一些相关的博客比较少 成功后记录如下 一 写在前面 argc argument count 表示传入main函数的参数个数 argv ar
  • 掌握Python的X篇_37_类的实例化、类方法

    上篇我们已经学习了python中的类 并且学习到可以通过class关键字定义类 而类的最基本特性就是它是一个名称空间 本篇将会学习类的实例化 文章目录 1 类的实例化 1 1 init 函数 1 2 实例化流程 2 类方法与成员 1 类的实
  • Sql Server 日期查询

    当前月 USE DBName Go Use Database Declare Variables DECLARE ReportGenerationDate DATE DECLARE ReportMonth INT DECLARE Repor
  • freertos实用指南_大数据及其掌握方法(实用指南)

    freertos实用指南 随着技术的兴起 数十年来 来自人 企业和机器的数字信息呈指数增长 数据现在被认为是21世纪的石油 几十年前产生兆字节数据的组织现在每小时产生PB级新数据 例如 全球超过33亿智能手机用户 大数据介绍 每个人都在数以
  • SpringBoot单元测试之mock静态方法

    The article summary 1 为什么要对静态方法mock 2 如何使用 powermock 对静态方法 mock 2 1 添加依赖 2 2 编写测试类 2 3 需要注意的问题 1 为什么要对静态方法mock mockito库并
  • 学术答辩PPT模板分享

    130套学术答辩PPT模板分享 链接 https pan baidu com s 1S7YbRlzOeyqwdc9ay5 DYA 提取码 irxg 动态PPT 49套 静态PPT 34套 答辩PPT 24套 精选动态PPT 21套
  • 如何做口碑营销?企业实施网络口碑营销的技巧

    随着互联网的发展 互联网早期的红利期已经完结 现在的互联网行业是用户开发成本越来越高 电子商务的转化率也越来越低 为了降低用户的开发成本和提高转化率 企业一定要重视口碑营销 口碑营销是靠口碑自动去传播 老客户带来新客户的营销模式 成本极低效
  • 10.BIO、NIO、AIO、多路复用IO的区别(图解)

    学习之前 我们先来了解一下IO模型 同步阻塞IO Blocking IO 即传统的IO模型 同步非阻塞IO Non blocking IO 默认创建的socket都是阻塞的 非阻塞IO要求socket被设置为NONBLOCK 注意这里所说的
  • ansible 添加 cron 任务

    找到相应的role 假设以storm nimbus为例 将要完成的任务脚本放在files目录下 例如 vim roles storm nimbus files storm recovery bin bash service storm me
  • KMP算法-超级无敌详细(嚼碎了喂你)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 朴素的模式匹配算法 BF暴力匹配算法 二 KMP算法 1 next 数组求法 2 next j 数组代码分析 三 计算出与主串匹配的位置 总结 前言 提示
  • vue3导入element-plus的index.css路径问题

    在做vue3项目的过程中 使用了element plus这个开源组件库 在引入index css这个样式的时候出现了一个问题 使用了之前的 import element plus lib theme chalk index css 导入时路
  • js 三个点 “...“ 省略号的语法

    js 三个点 省略号的语法 概念 是ES6的新语法 该写法在js的不同语境中有不同的解释 可解释为展开语法 Spread syntax 和剩余语法 Rest syntax 写法相同 但作用却是完全相反的 使用时要注意区分 本文主要参考MDN
  • linux 执行 mysql存储过程_mysql 存储过程 执行

    mysql存储过程 mysql存储过程 存储过程 Stored Procedure 是在大型数据库系统中 一组为了完成特定功能的SQL 语句集 经编译后存储 在数据库中 用户通过指定存储过程的名字并给出参数 如果该存储过程带有参数 来执行它
  • 期刊分类—CSSCI、A类、B类、C类、核心期刊的区别

    文章与视频资源多平台更新 微信公众号 知乎 B站 头条 AI研习图书馆 深度学习 大数据 IT编程知识与资源分享 欢迎关注 共同进步 CSSCI A类 B类 C类 核心期刊的区别如下 一 创刊单位不同 1 cssci 是南大核心 南京大学评
  • c++变量模板总结

    一 定义 泛化 全特化 偏特化 使用方法 include