模板名称的问题及解决 typename规则 C++20 typename 上篇文章c++11-17 模板核心知识(十四)-- 解析模板之依赖型模板名称 Dependent Names of Templates(.template/->template/::template) 介绍了依赖型模板名称,提到关于模板解析有六个大方面: 非模板中的上下文相关性 Context Sensitivity in Nontemplates 依赖型类型名称 Dependent Names of Types <--…
Case 1 : ParamType是一个指针或者引用,但不是universal reference T& const T& T* Case 2 : ParamType是Universal Reference 注意区别Universal Reference与右值引用 Case 3 : ParamType既不是指针也不是引用 数组作为参数 ParamType按值传递 ParamType为引用类型 函数作为参数 首先我们定义一下本文通用的模板定义与调用: template<typenam…
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阶段会读取源码并生…
类模板声明.实现与使用 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 定义函数模板…
一.模板的基础配置及使用 [参考]https://docs.djangoproject.com/zh-hans/3.0/topics/templates/ 作为Web框架,Django提供了模板,用于编写html代码,还可以嵌入模板代码更快更方便的完成页面开发,再通过在视图中渲染模板,将生成最终的html字符串返回给客户端浏览器.模版致力于表达外观,而不是程序逻辑.模板的设计实现了业务逻辑view与显示内容template的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用. 1.1…
名称分类 名称查找 ordinary lookup ADL (Argument-Dependent Lookup) 官网的例子 ADL的缺点 在C++中,如果编译器遇到一个名称,它会寻找这个名称代表什么.比如x*y,如果x和y是变量的名称,那么就是乘法.如果x是一个类型的名称,那么就声明了一个指针. C++是一个context-sensitive的语言 : 必须知道上下文才能知道表达式的意义.那么这个和模板的关系是什么呢?构造一个模板必须知道几个上下文: 模板出现的上下文 模板被实例化的上下文…
引子 如何区分 模板参数 const disqualify universal reference auto声明 引子 T&&在代码里并不总是右值引用: void f(Widget&& param); // rvalue reference Widget&& var1 = Widget(); // rvalue reference auto&& var2 = var1; // not rvalue reference template<…