自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 资源 (4)
  • 收藏
  • 关注

原创 conditional的定义

一个泛化版本,一个偏特化版本。

2024-04-23 17:50:56 84

原创 模板的参数,必须给全。不管是隐式还是显式还是默认值

注意,虽然在函数调用时只用到了第一个参数类型,但第二个还是要给出来。不管是显式,还是以默认值的形式。

2024-04-22 09:50:59 210

原创 判断一个类型里,是否同时含有begin和end函数

【代码】判断一个类型里,是否含有begin和end函数。

2024-04-19 11:12:33 85

原创 用数字实例化模板

【代码】用数字实例化模板。

2024-04-12 18:48:31 318

原创 enable_if和类的偏特化

3、偏特化版本的第二个模板参数,推导的结果需要和泛型版本的保持一致。也就是说,void对void,int对int。你要是在偏特化版本里不写第二个参数,那么系统就会用泛型的默认参数类型。2、最泛型的版本必须是要有的,也就是templateclass A;的写法,肯定是参数不足,它需要一个默认的参数来作为第二个参数。发现不支持这种写法,报错:error C2059: 语法错误:“=”参数太少,是因为第二个参数没有直接或间接指定。放到上面呢,还是不行。

2024-04-03 20:11:39 159

原创 enable_if在构造函数模板中的应用

【代码】enable_if在构造函数模板中的应用。

2024-04-02 14:37:23 128

原创 分析:两种不同的函数模板写法,其中一种为何不行

明明void __cdecl test451(int)和void __cdecl test451(double)并不一样啊。注意,左边的写法的第二个模板参数,是默认参数的形式。为何这里采取了默认参数的形式呢,本意是想让编译器来走sfine的流程,用户不用指明具体的类型。$test451@HH@@YAXH@Z,也就是void __cdecl test451(int)意思是,在实例化double的情况的时候,提示默认参数被重定义了。

2024-04-02 12:27:39 850

原创 利用类型,做函数模板的“重载”

还有一种写法,就会编译失败,仔细分析分析?typename=相当于使用默认的类型,并省略了一个名字。

2024-04-01 10:11:22 151

原创 用enable_if来控制多个不同参数的流程

22,23和24走第二个函数。27,29和30走第三个函数。

2024-03-29 15:44:22 167

原创 模板实战:函数不需要特化或者偏特化是吧,因为可以重载?只有类才有。

2、需要其他参数来初始化EditElementHandle,比如DgnHistory::FarElementID,或者ElementId和std::wstring。对于2和3,提供对应参数的重载函数(非模板,但名字一样)。对于4,有了以上的实现,拿到了EditElementHandle的实例,第4就很容易实现了。4、对于3,想在EditElementHandle生成之后,再统一添加一些数据在其身上。3、针对1和2,想提供统一的接口来生成EditElementHandle对象。

2024-02-28 16:07:38 212 1

原创 为了正常查找,std::sort如果用了排序规则,那么std::lower_bound和std::binary_search也要用这个规则,除非自己知道自己干什么

【代码】为了正常查找,std::sort如果用了排序规则,那么std::lower_bound和std::binary_search也要用这个规则,除非自己知道自己干什么。

2024-02-26 10:47:27 87

原创 std::binary_search和std::lower_bound的关系,哪些不同,以及要注意的点

std::lower_bound查询到的只是第一个不满足查询条件的那个值,但和你要查的那个值不一定相等,所以binary_search在最后又用!_Pred(_Val, *_UFirst)进行反向判断。_Pred(*_UFirst, _Val) 为true的,所以再检查一下!_Pred(_Val, *_UFirst)就行了。反映到binary_search上就是,!_Pred(*_UFirst, _Val) 和!_Pred(_Val, *_UFirst)均为true,那么就是要找的那个值了。

2024-02-22 13:54:52 207

原创 std::lower_bound面对升序的情况,以及注意其查找规则

【代码】std::lower_bound面对升序的情况。

2024-02-21 14:49:58 115

原创 std::lower_bound所应用的容器,一定要是有序的,否则的话就会找不到。

注意,std::lower_bound里的比较规则是:pos.first <= key.first,如果是pos.first < key.first,结果又是什么?注意,这个排序规则是:first升序,而second降序。,而用lower_bound查找的时候,用的是first来查找。

2024-02-21 14:43:08 152

原创 __is_convertible_to,需要满足的相关条件

【代码】__is_convertible_to,需要满足的相关条件。

2024-02-19 13:15:33 117

原创 C++模板判断类中是否存在某个名称的成员函数

【代码】C++模板判断类中是否存在某个名称的成员函数。

2024-01-31 23:01:42 397

原创 在实际项目中使用std::enable_if

一个类有不止一个构造函数,想在构造元素的时候,做点别的:比如给元素附加一些数据。

2024-01-23 18:47:33 364

原创 C# 把文本文件转UTF-8

【代码】C# 把文本文件转UTF-8。

2024-01-03 15:35:01 529

原创 vscode的搜索速度好慢。准备试试ripgrep的带UI版本

vscode的搜索真的很慢。也不知道为什么,懒得研究了。最新的0.7版本,界面上不显示搜索结果。在github上找到了一个带UI的ripgrep。不到一秒钟,在9550个文件里找到了所有匹配结果。比ripgrep慢了好多倍。

2024-01-02 11:50:13 548

原创 研究:同样的C++模板在多个cpp里出现,编译器是否要重复生成?

2023年就要过去,马上要跨如2024年。祝大家在新的一年,有个好收成。一直以来不是很确定:同样的的模板,在各个cpp分别出现,编译器要实现几份?研究一下。

2023-12-31 22:01:53 780

原创 记录:可以观察模板实例化后代码的在线网站

C++ Insights

2023-12-31 10:42:31 360

原创 准备用vscode代替sourceinsight

看网上说vscode内置了ripgrep,但ctrl+shift+f在文件里查找的时候,速度特别慢,根本不像ripgrep的速度。ripgrep的速度是很快的。有的符号,sourceinsight解析不到。但今天再查询,速度又很快了,不知道什么原因。vscode版本1.85.1。

2023-12-29 16:34:43 870

原创 观察者(模板)的一点体会

在用具体类型(比如std::function)对Events的typename Func在定义时,其实已经把函数的参数和返回值都定义好了。但后来发现有个问题,如果我用Events<std::function<void(int,int)>>进行实例化,在调用Notify的时候,编译就有问题了。当编译器看到Events<std::function<bool(int, int)>>时,它只把除了Notify之外的函数给实例化了。这样的化,Events就会有多个Notify的版本,散落在各个模块(实例化它的地方)

2023-12-28 21:37:53 294

原创 隐式转换,以及const

先用隐式转换(std::string的构造函数不是explicit),将字符串'123"生成了一个std::string的临时对象。然后函数用const std::string&接住了它,将其lifetime一直延续到函数结束。据说const &作用堪比universal reference,只是多了个const。

2023-12-26 20:50:32 419

原创 doxygen注释头文件时,一定得有@file

而且@file后面要和当前的文件名保持一致,否则就出不来文档。那么对于头文件的注释文档是出不来的。其他的有没有不重要。

2023-12-25 13:05:40 354

原创 std::map看来要被淘汰了?可以用vector来替代,而且更好

vector的优势在于内存连续,可以先std::sort,然后std::lower_bound,或者std::binary_search。而std::map,insert的时候,需要new出内存。

2023-12-18 23:43:37 395

原创 六君子:特殊成员函数模板(Special Member Functions)

部分内容摘自:函数重载的时候,const参数和非const参数,在编译器看来,是完全不同的东西,是可以重载的,而且在左值的时候,非const的优先级更高。下面的代码,编译器选择的是void foo2(int & t)避免对万能引用使用重载(Universal References)看下面,你可能希望所有的左值都走第一个,其余的都走第二个。但实际上,const的左值走第一个,其余都走第二个,也就是说普通的左值也走第二个。

2023-12-18 22:33:49 421

原创 关于emplace_back(emplace的含义是:安放)

emplace_back在面对非右值时,没有提升效率,还是要copy的。

2023-12-17 20:33:31 363

原创 push_back和emplace_back的区别

除了一种情况,多变量的时候,emplace版本会先进行分配内存,然后用placement new在给定的地址上进行调用构造函数。不管是左值还是右值,push_back都调用的emplace_back。

2023-12-17 16:08:14 18

原创 C++对象的几个特殊成员函数

【代码】C++对象的几个特殊成员函数。

2023-12-16 22:29:41 307

原创 const延长临时对象的lifetime

返回”abc“的时候,会生成一个临时对象,也就是返回了一个右值。

2023-12-16 22:16:07 12

原创 函数返回std::vector<std::wstring>类型变量时,发生了什么

可以先看这篇,说明了右值赋值构造函数存在的意义: CSDN果然进了右值赋值构造函数里,都说面对函数内部返回的对象,都会进行优化。优化的途径就是走右值?最后走了swap,内部存储的wstring并没有参与什么: 要是用return std::vector{};情况就有所不同了就不会走vector的右值赋值构造函数。整个过程就初始化了一次vector。发现还是和上面的《返回vector的左值》时的情况一样,走的是右值赋值构造函数。大家口中所说编译器进行了优化,可能就是指的这种情况。

2023-12-16 21:09:49 36

原创 研究:函数内返回对象时,会调用哪个C++特殊成员函数

发现在删除右值的赋值构造函数的时候,编译出现问题:X(X&& rhs) = delete;说明默认是调用右值的赋值构造函数的。自己平时没实现,其实系统帮着实现了个默认的。从下面的代码里可以看出,返回函数里的对象,到外面的调用者。这个就有意思了,没有用到,但还是需要这个函数存在?注意,这个例子里放开了右值的赋值构造函数,但却没有用到。那么像这种情况下,会调用X的哪个特殊成员函数呢?一个是函数内的对象,另一个是调用方的变量x0。挨个删除特殊成员函数,看看会有什么提示。发现整个过程只有一个对象被创建。

2023-12-16 19:53:29 15

原创 auto&&

const auto&很多时候可以达到aut&&同样的效果,可以延长变量的lifetime,但是。用auto&&引用变量的时候,大概率想表达的是这个值在之后的代码中可能会被修改。如果不是的话,可以尽量使用const auto&

2023-12-16 18:46:26 11

原创 调试模板代码时的一个小技巧

数组的版本,由于在这里没有实例化,所以没有pdb的调试信息,就无法下断点。在调试中,如果模板函数(类)被实例化了,那么就可以正常下断点。如果没有,就会显示,

2023-12-06 13:31:33 18

原创 函数模板之间不能重载,把类型推导放到形参里就可以了

【代码】函数模板之间不能重载,把类型推导放到形参里就可以了。

2023-12-03 13:29:33 31

原创 记录:特殊成员函数模板

6.2 特殊成员函数模板 - 知乎闭关之 C++ Template 笔记(二):PartⅠ基本概念(二)_struct adl_serializer

2023-11-28 14:21:40 24

原创 一个设计,用继承还是用模板?

【代码】一个设计,用继承还是用模板?

2023-11-24 19:59:51 22

原创 声明里面带箭头的函数

函数名中的箭头,用来表明函数的return type,其使用在函数的返回类型需要通过模板参数进行推导,使用在decltype()和declval()不方便的场景。

2023-11-24 18:57:05 23

原创 一窥模板的替换和匹配方式:偏特化的参数比泛化版本的还要多:判断是不是std::pair<,>。

【代码】SFINAE:判断是不是std::pair<,>

2023-11-24 16:06:21 279

架构之美 英文版 Beautiful Architecture

还需要多说吗? 经典书籍! 从国外网站上下的。

2009-12-04

一种Delegate机制的设计与分析

是我从期刊网上下载的,扣了我3块钱。 主要讲了委托的如何实现。

2009-08-27

计算机组成原理(唐朔飞版)

本书概念清楚,通俗易懂,书中举例力求与当代计算机结合,可作为高等院校计算机专业教材

2009-08-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除