类模板的非类型模板参数 函数模板的非类型模板参数 限制 使用auto推断非类型模板参数 模板参数不一定非得是类型,它们还可以是普通的数值.我们仍然使用前面文章的Stack的例子. 类模板的非类型模板参数 声明: template <typename T, std::size_t Maxsize> class Stack { private: std::array<T, Maxsize> elems; // elements std::size_t numElems; // curr…
Callables 函数对象 Function Objects 处理成员函数及额外的参数 std::invoke<>() 统一包装 泛型库的其他基本技术 Type Traits std::addressof() std::declval 完美转发 Perfect Forwarding 作为模板参数的引用 延迟计算 Defer Evaluations Callables 许多基础库都要求调用方传递一个可调用的实体(entity).例如:一个描述如何排序的函数.一个如何hash的函数.一般用cal…
概念 举例 模板的模板参数的参数匹配 Template Template Argument Matching 解决办法一 解决办法二 概念 一个模板的参数是模板类型. 举例 在c++11-17 模板核心知识(二)-- 类模板 中,如果我们想要允许指定存储Stack元素的容器,是这么做的: template <typename T, typename Cont = std::vector<T>> class Stack { private: Cont elems; // elemen…
tokenization与parsing 解析模板之类型的依赖名称 Dependent Names of Templates Example One Example Two Example Three 有时间的建议先看下上篇文章 : c++11-17 模板核心知识(十三)-- 名称查找与ADL tokenization与parsing 绝大多数语言在编译的时候都有两个阶段: tokenization,或者叫scanning/lexing parsing tokenization阶段会读取源码并生…
模板名称的问题及解决 typename规则 C++20 typename 上篇文章c++11-17 模板核心知识(十四)-- 解析模板之依赖型模板名称 Dependent Names of Templates(.template/->template/::template) 介绍了依赖型模板名称,提到关于模板解析有六个大方面: 非模板中的上下文相关性 Context Sensitivity in Nontemplates 依赖型类型名称 Dependent Names of Types <--…
对于函数模板与类模板,模板参数并不局限于类型,普通值也可以作为模板参数.在基于类型参数的模板中,你定义了一些具体的细节来加以确定代码,直到代码被调用时这些细节才被真正的确定.但是在这里,我们面对的是这些细节是值,而不是类型,当要使用基于值的模板时,必须显式地指定这些值,才能够对模板进行实例化. 本文地址:http://www.cnblogs.com/archimedes/p/cpp-template-type.html,转载请注明源地址. 在上篇文章(C++类模板)中我们介绍了一个stack类模…
非类型模板参数是通过基本变量类型引入,例如int,在使用时必须显式自定值,不能通过推断. 非类型模板参数的限制:不能是浮点数(在vc6.0上测试可以为浮点型),对象以及指向内部链接对象的指针. #include <iostream> #include <string> #include <vector> using namespace std; enum COLOR{WHITE,BLACK}; template<COLOR name>//OK int pro…
在刚开始学习<C++ Primer>的时候遇到了 end 函数,感觉很神奇,但又很迷惑:为什么能获得数组的尾后指针呢?编译器也不会在内存中申请一块空间放数组元素的个数啊!最近再一次遇到了 end 就看了一下它的实现终于明白了. 先说以下C语言中获得数组元素个数的方法. int arr[] = {1, 2, 3}; size_t n = sizeof(arr) / sizeof(int); //n为元素个数 sizeof 返回一个常量表达式,是在编译时期确定返回值的.也就是说在编译时期是可以知道…
返回完整目录 目录 1.3 多模板参数 Multiple Template Parameters 1.3.1 为返回类型设置模板参数参数 Template Parameters for Return Types 1.3.2 推断返回类型 Deducing the Return Type 1.3.3 使用共同类型作为返回类型 Return Type as Common Type 1.3 多模板参数 Multiple Template Parameters 函数模板(function templat…
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 定义函数模板…