- 博客(77)
- 资源 (4)
- 收藏
- 关注
原创 fmt::basic_format_context
里面保存了OutputIt,其实就是std::back_insert_iterator的一个子类,见。用等于号(=),内部会调用push_back。
2024-05-14 10:26:03 90
原创 fmt的format_arg_store以及make_format_args(args...)
注意remove_cvref_t...,它的意思是把每个参数都给去掉const等信息,然后用逗号分隔。remove_cvref_t...的结果就是double,int,std::string。比如args展开是const double, int&, const std::string。一般默认类型都是最后一个。可能跟后面的参数是变长有关。注意,Context是默认的类型:format_context。这个函数是把参数args生成format_arg_store。
2024-05-13 00:17:30 181
原创 fmt的basic_format_string
basic_format_string构造函数用enable_if做了筛选,如果变量类型不能被转换成basic_string_view,那么这个构造函数就不能使用。因为这个类里面有个成员变量是basic_string_view str_;,如果不能转换成功,那么就无法赋值给这个成员变量。就是里面有一个basic_string_view类型的成员变量,其他的都是编译期的检查。果然就把信息给打印出来了。而且还给了其他信息。
2024-05-12 13:18:07 169
原创 变长参数在fmt里的使用,以及一些展开的写法
第二个参数fmt的时候,fmt按照format_string的样式进行推导,此时要确定T...,那么这个T...就是下面的两个参数const double和int了,由于这里用的是模板,而且用的是T&&,所以折叠后就变成了const double&和int&了。format_string的定义中,第一个参数是字符类型char,剩下的是type_identity_t...仔细观察format_to这个函数,基本上只有两个参数类型,一个是OutputIt,一个是...T。
2024-05-11 17:14:53 335
原创 返回类型后置,一个用途是为了逻辑上的体现?
大家一般都是先关心参数,然后最后再看返回的是什么类型。在这里把返回类型后置,可能就是一种逻辑上的体现吧。
2024-05-11 11:52:28 105
原创 关于fmt的用法
打印range:vector,pair、tuple、set和map。对字符串进行截断(只截取字符串的前几个字符),前端补齐空格或者其他字符进行对齐,浮点数的精度,以及四舍五入。用fmt::ptr打印指针。内存管理:分解字符串?长数字加都好分隔符,
2024-05-11 11:48:52 317
原创 fmt::arg的使用
也就是说,如果觉得{}或者{0}的表达方式不够明确,可读性不好。比如说想表达一个公式:x+y=10的计算过程:4+6=10。
2024-05-11 10:25:16 149
原创 一个单例模式中使用std::unique_ptr引起的莫名其妙的COFF损坏的问题(未解决)
看到网上有人说这是一个编译器的bug:有文章解释如下:LNK1254, LNK1284, and LNK1235 linker errors may occur while compiling a C source file with the /clr compiler option (822329)LINK : fatal error LINK1254: metadata for symbol symbol name inconsistent with COFF symbol table<managed
2024-04-30 11:36:17 845
原创 【转载】C++代码中将函数返回类型后置有啥好处吗
内容如下:C++代码中将函数返回类型后置有啥好处吗?这种语法是 C++11 新增的,学名叫 trailing return type[1]。翻译过来是,trailing 是后面的、拖尾的意思。书写 int func() 比书写 auto func() -> int 省笔墨。强制所有函数的声明改成后者,就如同强制把所有的变量声明类型改成 auto 一样,代码有异味,变得恶心。
2024-04-29 14:14:55 745 2
原创 模板的参数,必须给全。不管是隐式还是显式还是默认值
注意,虽然在函数调用时只用到了第一个参数类型,但第二个还是要给出来。不管是显式,还是以默认值的形式。
2024-04-22 09:50:59 211
原创 enable_if和类的偏特化
3、偏特化版本的第二个模板参数,推导的结果需要和泛型版本的保持一致。也就是说,void对void,int对int。你要是在偏特化版本里不写第二个参数,那么系统就会用泛型的默认参数类型。2、最泛型的版本必须是要有的,也就是templateclass A;的写法,肯定是参数不足,它需要一个默认的参数来作为第二个参数。发现不支持这种写法,报错:error C2059: 语法错误:“=”参数太少,是因为第二个参数没有直接或间接指定。放到上面呢,还是不行。
2024-04-03 20:11:39 168
原创 分析:两种不同的函数模板写法,其中一种为何不行
明明void __cdecl test451(int)和void __cdecl test451(double)并不一样啊。注意,左边的写法的第二个模板参数,是默认参数的形式。为何这里采取了默认参数的形式呢,本意是想让编译器来走sfine的流程,用户不用指明具体的类型。$test451@HH@@YAXH@Z,也就是void __cdecl test451(int)意思是,在实例化double的情况的时候,提示默认参数被重定义了。
2024-04-02 12:27:39 860
原创 模板实战:函数不需要特化或者偏特化是吧,因为可以重载?只有类才有。
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 217 1
原创 为了正常查找,std::sort如果用了排序规则,那么std::lower_bound和std::binary_search也要用这个规则,除非自己知道自己干什么
【代码】为了正常查找,std::sort如果用了排序规则,那么std::lower_bound和std::binary_search也要用这个规则,除非自己知道自己干什么。
2024-02-26 10:47:27 91
原创 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 209
原创 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 153
原创 vscode的搜索速度好慢。准备试试ripgrep的带UI版本
vscode的搜索真的很慢。也不知道为什么,懒得研究了。最新的0.7版本,界面上不显示搜索结果。在github上找到了一个带UI的ripgrep。不到一秒钟,在9550个文件里找到了所有匹配结果。比ripgrep慢了好多倍。
2024-01-02 11:50:13 601
原创 研究:同样的C++模板在多个cpp里出现,编译器是否要重复生成?
2023年就要过去,马上要跨如2024年。祝大家在新的一年,有个好收成。一直以来不是很确定:同样的的模板,在各个cpp分别出现,编译器要实现几份?研究一下。
2023-12-31 22:01:53 784
原创 准备用vscode代替sourceinsight
看网上说vscode内置了ripgrep,但ctrl+shift+f在文件里查找的时候,速度特别慢,根本不像ripgrep的速度。ripgrep的速度是很快的。有的符号,sourceinsight解析不到。但今天再查询,速度又很快了,不知道什么原因。vscode版本1.85.1。
2023-12-29 16:34:43 982
原创 观察者(模板)的一点体会
在用具体类型(比如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 364
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人