类模板声明.实现与使用 Class Instantiation 使用类模板的部分成员函数 Concept 友元 方式一 方式二 类模板的全特化 类模板的偏特化 多模板参数的偏特化 默认模板参数 Type Aliases new name for complete type alias template Alias Templates for Member Types 关键字typename Using or Typedef 类模板的参数推导 Class Template Argument Ded…
概念 举例 模板的模板参数的参数匹配 Template Template Argument Matching 解决办法一 解决办法二 概念 一个模板的参数是模板类型. 举例 在c++11-17 模板核心知识(二)-- 类模板 中,如果我们想要允许指定存储Stack元素的容器,是这么做的: template <typename T, typename Cont = std::vector<T>> class Stack { private: Cont elems; // elemen…
Callables 函数对象 Function Objects 处理成员函数及额外的参数 std::invoke<>() 统一包装 泛型库的其他基本技术 Type Traits std::addressof() std::declval 完美转发 Perfect Forwarding 作为模板参数的引用 延迟计算 Defer Evaluations Callables 许多基础库都要求调用方传递一个可调用的实体(entity).例如:一个描述如何排序的函数.一个如何hash的函数.一般用cal…
模板名称的问题及解决 typename规则 C++20 typename 上篇文章c++11-17 模板核心知识(十四)-- 解析模板之依赖型模板名称 Dependent Names of Templates(.template/->template/::template) 介绍了依赖型模板名称,提到关于模板解析有六个大方面: 非模板中的上下文相关性 Context Sensitivity in Nontemplates 依赖型类型名称 Dependent Names of Types <--…
tokenization与parsing 解析模板之类型的依赖名称 Dependent Names of Templates Example One Example Two Example Three 有时间的建议先看下上篇文章 : c++11-17 模板核心知识(十三)-- 名称查找与ADL tokenization与parsing 绝大多数语言在编译的时候都有两个阶段: tokenization,或者叫scanning/lexing parsing tokenization阶段会读取源码并生…
我们以顺序表为例来说明,普通顺序表的定义如下: typedef int DataType; //typedef char DataType; class SeqList { private : DataType* _data ; int _size ; int _capacity ; } ; 模板类也是模板, 必须以 关键字templ ate开头, 后接模板形参表. 模板类一般格式如下:template<class 形参名 1, class 形参名 2, . . . class 形参名 n>c…
1.1 定义函数模板 1.2 使用函数模板 1.3 两阶段翻译 Two-Phase Translation 1.3.1 模板的编译和链接问题 1.4 多模板参数 1.4.1 引入额外模板参数作为返回值类型 1.4.2 让编译器自己找出返回值类型 1.4.3 将返回值声明为两个模板参数的公共类型 1.5 默认模板参数 1.6 重载函数模板 1.6.1 重载时最好不要随便改变模板参数个数,最好可以显示的指定模板参数类型 1.6.2 确保所有被重载的函数模板在使用时已经被声明定义 1.1 定义函数模板…
类模板的非类型模板参数 函数模板的非类型模板参数 限制 使用auto推断非类型模板参数 模板参数不一定非得是类型,它们还可以是普通的数值.我们仍然使用前面文章的Stack的例子. 类模板的非类型模板参数 声明: template <typename T, std::size_t Maxsize> class Stack { private: std::array<T, Maxsize> elems; // elements std::size_t numElems; // curr…
一个类模板(也称为类属类或类生成类)允许用户为类定义一种模式,使得类中的某些数据成员.默写成员函数的参数.某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的). 如果一个类中数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的.实际的类,而是代表着一类类. //templatedemo.h#ifndef TEMPLATE_DEMO_HXX#define TEMPLATE_DEMO_HXX template…
一.类模板 类模板:将类定义中的数据类型参数化 类模板实际上是函数模板的推广,可以用相同的类模板来组建任意类型的对象集合 (一).类模板的定义 template  <类型形参表> class  <类名> {     //类说明体  }: template  <类型形参表> <返回类型> <类名> <类型名表>::<成员函数1>(形参表) {     //成员函数定义体  } template  <类型形参表>…