概念 举例 模板的模板参数的参数匹配 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 <--…
Callables 函数对象 Function Objects 处理成员函数及额外的参数 std::invoke<>() 统一包装 泛型库的其他基本技术 Type Traits std::addressof() std::declval 完美转发 Perfect Forwarding 作为模板参数的引用 延迟计算 Defer Evaluations Callables 许多基础库都要求调用方传递一个可调用的实体(entity).例如:一个描述如何排序的函数.一个如何hash的函数.一般用cal…
类模板声明.实现与使用 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…
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 定义函数模板…
引子 使用enable_if<>禁用模板 enable_if<>实例 使用Concepts简化enable_if<> SFINAE (Substitution Failure Is Not An Error) SFINAE with decltype 引子 class Person { private: std::string name; public: // generic constructor for passed initial name: template &…
decltype介绍 为什么需要decltype decltype(auto) 注意(entity) 与模板参数推导和auto推导一样,decltype的结果大多数情况下是正常的,但是也有少部分情况是反直觉的. decltype介绍 给定一个name或者expression,decltype会告诉你它的类型. 我们先从正常情况开始: const int i = 0; // decltype(i) is const int bool f(const Widget& w); // decltype(…
名称分类 名称查找 ordinary lookup ADL (Argument-Dependent Lookup) 官网的例子 ADL的缺点 在C++中,如果编译器遇到一个名称,它会寻找这个名称代表什么.比如x*y,如果x和y是变量的名称,那么就是乘法.如果x是一个类型的名称,那么就声明了一个指针. C++是一个context-sensitive的语言 : 必须知道上下文才能知道表达式的意义.那么这个和模板的关系是什么呢?构造一个模板必须知道几个上下文: 模板出现的上下文 模板被实例化的上下文…
个人总结:读完这篇文章需要15分钟,文章介绍了抽象语法树与js引擎解析这些语法树的过程,提到了懒解析——即转换为AST的过程中不直接进入函数体解析,当这个函数体需要执行的时候才进行相应转换.(因为有的函数体只是声明了,并没有实际被调用) 解析,语法抽象树及最小化解析时间的 5 条小技巧 这是 JavaScript 工作原理的第十四章. 概述 我们都知道运行一大段 JavaScript 代码性能会变得很糟糕.代码不仅仅需要在网络中传输而且还需要解析,编译为字节码,最后运行.之前的文章讨论了诸如 J…