源码阅读
文章平均质量分 65
很多知识我们都能从源码获取
整理行囊
时刻反省自己能不能吃这碗饭,程序员存在的使命就是优化,当你学不进去的时候就是该走的时候了。
展开
-
判断是否是函数类型(学习到了函数和引用没法被const修饰,重新复习了下顶层const和底层const)
//是否是const类型利用特化是实现template <class>_INLINE_VAR constexpr bool is_const_v = false; // determine whether type argument is const qualifiedtemplate <class _Ty>_INLINE_VAR constexpr bool is_const_v<const _Ty> = true;template <class _原创 2022-02-16 00:19:25 · 165 阅读 · 0 评论 -
-----------------
判断是否是enum类型,且不能转化为int类型。(enum class的实现。强类型匹配,不能隐士转化)template <bool _First_value, class _First, class... _Rest>struct _Conjunction { // handle false trait or last trait using type = _First;};template <class _True, class _Next, class... _Re原创 2022-02-15 00:26:13 · 190 阅读 · 0 评论 -
type_traits--3
文章目录一、源码二、源码解析1.remove_extent:移除数组的第一层维度2.remove_all_extents: 移除所有数组维度3.remove_pointer: 移除指针类型4.add_pointer : 添加指针类型5.is_array: 判断是否是数组类型6.is_reference:是否是引用类型。is_lvalue_reference: 左值引用,is_rvalue_reference: 右值引用7.is_pointer: 是否是指针类型8.is_null_pointer: 判断指针是原创 2022-02-13 21:27:26 · 375 阅读 · 0 评论 -
type_traits-_Add_reference解析(void_t类型的使用,declval解析)
文章目录前言一、源码二、解析1.源码解析2.测试demo前言根据源码看要是传入左值引用的话即便调用返回右值返回的依旧是左值。(这部分真的理解不了,我找了好久也不知道为啥如此设计。我看源码一直以为自己理解错误了,我一直以为他是可以将引用擦除掉的。我还特意以为void_t可以类型擦除(我以为void_t<T&>里可以匹配到左值然后把他擦除掉。),说来可笑,这几天一直找原因。还以为我之前学习的模板类型推导理解出现了问题导。特意把之前的又都梳理了一下。后来本地demo测了一下。无语了。他就是原创 2022-02-13 01:19:27 · 558 阅读 · 0 评论 -
-------
//满足参数至少两个时才会被选择。当满足参数至少两个2个时第一个参数为true就会被选择。或者只有两个参数,因为下边偏特化版本需要三个参数。template <bool _First_value, class _First, class... _Rest>struct _Conjunction { // handle false trait or last trait using type = _First;};//对上一个进行了偏特化。偏特化出第三个参数和第一个参数是true。原创 2022-02-10 00:05:16 · 212 阅读 · 0 评论 -
type_traits-integer_sequence解析(继承方式添加可变参数)
文章目录前言定义以及使用一、integer_sequence源码二、使用步骤1.全部解析2.重点解析1. 递归调用自身的模板思想2. integral_constant存在的必要性。总结前言对之前所学进行检验。从源码中学习如何使用模板。定义以及使用integer_sequence:判断是否是整数类型,不是则编译失败(利用静态断言),是则保存自身类型和传入的的整形类型,以及保存可变参数的长度。index_sequence_for:生成指定大小的integer_sequence类型。例如in原创 2022-02-09 00:17:12 · 483 阅读 · 0 评论 -
带你走进模板编程基础2
文章目录前言一、源码二、源码解析1. remove_const:移除const标志2. remove_volatile:去除volatile(感觉没咋用到过的关键字,只是了解不让编译器优化),和const那个使用方式是一样的,利用特化提取了关键字,重新制定了类型3. remove_cv:去除const和volatile属性4. _Disjunction:(感觉咋描述都不清晰)5. disjunction:对_Disjunction不规格数据的过滤,利用继承方式去提取可变参数。6. _Is_any_of_v原创 2022-02-08 01:15:08 · 834 阅读 · 0 评论 -
带你走进模板编程基础
文章目录前言一、部分源码二、详解1.各种宏定义的作用和使用2.源码解读3.模板代码欣赏(标签分发-解决函数无法重载)总结前言想要了解模板编程,肯定绕不过如下基础判断模板。一、部分源码// xtr1common internal header (core)// Copyright (c) Microsoft Corporation.// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception#pragma once#ifndef _X原创 2022-02-05 01:12:29 · 1021 阅读 · 0 评论