C++模板的类的展开
突然明白了C++模板的类的展开
也就是C++模板的递归
template<int i>
struct sum {enum {value = i + sum<i-1>::value};
};// 对i = 1特化
template<>
struct sum<0> {enum{value = 1};
};int main() {std::cout << sum<20>::value << std::endl;return 0;
}
当实例化模板类的时候需要传递 模板参数
c++的语法使用classname 也就是 xxx不同就是不同的模板,也就是他实际的值不同就是不同的模板类
对应上面的类就是
sum<20>
sum<19>
sum<18>
sum<17>
sum<16>
…
sum<0>
直到最后一个结果0位置,递归结束
仅仅是值类型的参数才可以递归,
tamplate 参数类型
有以下三种:
(1)模板的类型形参 (type parameter)
template<typename T>
template<class T>
(2)模板的非类型形参 (non-type parameter)
模板的非类型行参只有以下几种形式
整型或枚举型
到对象的指针或函数指针
到对象的引用或函数引用
成员指针
因此,以下几种代码都是可以接受的
template<int a> struct A {};
template<int* b> struct B {};
template<void f(int)> struct C{};
(3)模板形参 (template template parameter)
模板行参的意思是模板里面可以是另一个模板,如
template<template<typename T>> class X{};
C++模板的类的展开相关推荐
- 6、 函数模板和类模板
函数模板和类模板 前言 C++提供了函数模板(functiontemplate).所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表.这个通用函数就称为函数 ...
- [C++再学习系列] 函数模板和类模板
函数模板和类模板 C++ 提供类模板和函数模板.函数模板允许重载 ,而类模板不允许重载(类无重载概念).类模板可以进行全特化和偏特化,而函数模板仅能够全特化 .因此,写一个看似函数模板偏特化的函数模板 ...
- 判断exception类型_C++核心准则T.44:使用函数模板推断类模板参数类型(如果可能)...
T.44: Use function templates to deduce class template argument types (where feasible) T.44:使用函数模板推断类 ...
- C++编程进阶6(public继承与组合、private继承、多重继承、处理模板基类内的名称、如何避免模板代码膨胀)
二十一.public继承与组合 public继承是是子类对象is a基类对象的关系,比如QT中的所有组件类都要继承QObject,所以所有的QT组件都是一个QObject. 而组合是has a(包含) ...
- 有关函数模板和类模板的说法
下面有关函数模板和类模板的说法正确的有? 正确答案: A B C D 你的答案: A (错误) 函数模板的实例化是由编译程序在处理函数调用时自动完成的 类模板的实例化必须由程序员在程序中显式地指定 函 ...
- C++模板:类模板和类模板的友元【C++模板】(57)
类模板 Stack 类 类模板 格式 类模板的应用 类模板的多文件实现 类模板的友元 类模板中的友元在.h 类模板中的友元在.cpp hpp STL入门 类模板 Stack 类 我们先给出我们之前实现 ...
- c++函数模板和类模板
函数模板和类模板 前言 C++提供两种模板机制:函数模板.类模板 类属 -- 类型参数化,又称参数模板 前言 C++提供了函数模板(function template).所谓函数模板,实际上是建立一个 ...
- 类模板,多种类型的类模板,自定义类模板,类模板的默认类型,数组的模板实现,友元和类模板,友元函数,类模板与静态变量,类模板与普通类之间互相继承,类模板作为模板参数,类嵌套,类模板嵌套,类包装器
1.第一个最简单的类模板案例 #include "mainwindow.h" #include <QApplication> #include <QPush ...
- C++ 泛型编程(一):模板基础:函数模板,类模板,模板原理,模板匹配规则
类模板 函数模板 泛型编程 泛型编程,泛型即是指具有在多种数据类型上皆可操作的含义,其实就是能够帮助开发者编写完全一般化并可重复使用的算法,同样的工作不需要做多次,同样的算法针对不同的类型也不应该写多 ...
- P5170 【模板】类欧几里得算法
P5170 [模板]类欧几里得算法 https://www.cnblogs.com/bztMinamoto/p/10334354.html 对于类欧几里得算法,本质上可以理解为一条直线下的整点个数,是 ...
最新文章
- excel导入linux乱码怎么解决方法,,请大家都来看下,Excel导入有乱码?原因出在哪里?应该怎么解决?...
- LeetCode 1265. 逆序打印不可变链表(递归)
- php iframe 上传文件,php+iframe 实现上传文件功能示例
- form:radiobuttons单选按钮i-check选中触发
- 直接拿来用,10个PHP代码片段
- [Java][Servlet] Failed to destroy end point associated with ProtocolHandler [http-nio-8080]
- java 输出一个爱心_java基础 之 几个常用的类
- linux ip命令dhcp,嵌入式linux通过DHCP自动获取IP地址实现获取
- 团队项目第一阶段冲刺站立会议05
- 小程序 长按转发_微信小程序实现限制用户转发功能的实例代码
- HashMap初始容量指定规则
- 记录习惯【Unity 3D中3D场景下嵌套2D Canvas并实现窗口缩放】
- 使用微软TTS语音引擎实现文本朗读
- java jnlp 签名_JNLP(jar包签名)
- Unity3d优化总结2
- 全新仿DS网首页模板个人自动发卡,自动发货安装教程及其源码下载
- Python基于修正余弦相似度的电影推荐引擎
- sin和cos的爱恋
- 使用Unity制作游戏AI
- CentOS中使用VeraCrypt:安装及创建整个加密硬盘