- 博客(137)
- 资源 (4)
- 收藏
- 关注
原创 C++的模板duck typing和继承的区别
但这两种还是差别较大,duck typing例子里面的函数somefunc,不光可以接受duck,任何具有sing接口的对象,都可以调用。但在调用时必须知道具体类型。在模板的世界里,具体类型是很重要的。在模板的方式里,接口更像是duck们所具有的某种属性,你只要有,那么就可以。简而言之,如果你在调用的时候就知道具体类型,那么可以用模板。如果你不知道具体类型,那么就可以用继承。
2025-02-17 15:57:33
173
原创 无用知识研究:std::initializer_list的秘密
这个std::initializer_list是怎么个事呢,它就是一个wrapper,一个viewer。所以std::initializer_list对象的拷贝,也是属于“浅拷贝”,保存的都是指针,不影响它们指向的数据。先说结论,用std::initializer_list初始化vector,内部逻辑是先生成了一个临时数组,进行了拷贝构造,然后用这个数组的起终指针初始化initializer_list。所以说,用initializer_list初始化,还是有优化空间的。
2025-02-02 22:16:47
603
原创 无用知识研究:对std::common_type以及问号表达式类型的理解
也就是说true : 2 : 1.0作为一个整体,它有一个类型,系统会取其“共同”的类型。用decltype()来取,比如decltype(true : 2 : 1.0)。但它是在编译期来确定的,而不是运行期来确定,所以它不管condition的。所以第一条里面,true : 2 : 1.0的值为什么是2.0呢,因为decltype对其分析的结果就是double。比如一个问号表达式true : 2 : 1.0。它有一个值,这个值是根据condition判断出来的(这个例子里是true)。
2025-01-29 23:19:17
314
原创 过年之无用知识研究:std::is_assignable中的declval<_Dest>() = declval<_Src>()
【代码】无用的知识又增加了:assignable means?
2025-01-28 00:08:26
621
原创 过年之无用知识研究:std::is_assignable到底怎么个事?参考operator=
【代码】std::is_assignable到底怎么个事?
2025-01-27 21:28:44
194
原创 过年之无用知识研究:std::pair源码中operator=为什么被delete了,而提供sfinae版本
【代码】std::pair源码:operator=被delete了,提供的是sfinae版本。
2025-01-27 17:46:53
247
原创 data driven
https://philippegroarke.com/posts/2022/data_driven_descriptor_based_generative_cpp/
2024-12-27 18:37:30
413
原创 C++模板:编译时模拟Duck Typing
return p?class foopublic:class barpublic:OK, nice!allclass foopublic:class barpublic:This:do noclass foopublic:class bazpublic:......public:m_o(o)private:public:
2024-12-25 18:05:02
812
原创 打个共鸣的响指吧:给模板成员函数添加“限制”的方法:考察shared_ptr的operator->模板成员函数
后面的是模板成员函数operator->的实例化参数,0是enable_if_t对CPoint的判断结果。shared_ptr的operator->是shared_ptr模板类里的模板成员函数。第一个CPoint就是实例化shared_ptr时的CPoint,并且operator->加上了“限制”:不能是数组(!>() 行 1493 C++
2024-12-20 14:35:31
143
原创 模板decltype在对第三方库api声明有改动时的应对(原理:sfinae)
【代码】模板decltype在对第三方库api声明有改动时的应对。
2024-12-12 18:35:07
237
原创 利用尾部返回中的std::common_type实现sfinae
这里展示的使用场景,是在已有数据结构的基础上,对不同类型的迭代器在编译时进行选择:不同的迭代器返回其值。
2024-12-12 16:53:01
221
原创 unique_ptr自定义删除器,_Compressed_pair利用偏特化减少存储的一些设计思路
LeeCarry这世界太繁杂了,我只想守护自己的纯粹25 人赞同了该文章无意间看到FOCUS:现代 C++:一文读懂智能指针595 赞同 · 12 评论文章昂,一个unique_ptr要用40字节???第一反应是作者是不是笔误多打了个0?然而细看一下不对啊,这里应该是用64位测的,一个raw pointer是8字节,那应该不是笔误,再认真细看一下就明白了。
2024-12-09 13:21:42
865
原创 C++/Cli里重载winform的WndProc和ProcessCmdKey
不过看WndProc和ProcessCmdKey在C#上的定义,看不出System::Windows::Forms::Keys keyData居然不需要%注意,ProcessCmdKey里的第二个参数,不能用%
2024-11-28 15:54:39
329
原创 std::unique_ptr源码中构造函数的偏特化。_Unique_ptr_enable_default_t
【代码】std::unique_ptr源码中构造函数的偏特化。
2024-11-24 21:48:56
229
原创 【转】std::unique_ptr 删除器的秘密
可以看到,使用函数指针作为删除器产生的 std::unique_ptr 对象大小为 16 字节,使用 std::function 则为 40 字节,而使用无状态 lambda 和默认删除器均为 8 字节,果真没有引入额外的内存开销。我们知道,即使是一个不带任何数据成员的空类,其对象也至少要占一个字节,用以相互区别。而作者却说使用无状态的函数对象作为删除器,不会增加 std::unique_ptr 的大小。实际上,这玩意就是个模板类,和 std::pair 的概念类似,但特殊之处在于它有两个特化版本。
2024-11-23 17:35:58
1142
原创 std::unique_ptr自定义删除器(使用decltype推导类型)
【代码】std::unique_ptr自定义删除器(使用decltype推导类型)
2024-11-23 14:20:08
257
原创 用Dism备份系统,恢复系统,并创建新“虚拟”系统
注意,新创建的vhd在加载后看不到盘符,需要到“磁盘管理”里对其分配盘符,嘉定分配到的盘符为。注意,下图中编号1是备份文件的地址,编号2是要释放的判读,就是vhd被加载之后的那个盘。,请记住这个盘符,用Dism恢复的时候要用到。创建一个vhd文件,并加载。记得勾选上添加引导。
2024-11-15 11:42:12
371
原创 关于integral_constant
所以,true_type其实就是bool_constant,也就是integral_constant所以,如果有其他类继承自了true_type,那么它就拥有了value,其值为true。
2024-11-14 12:32:31
209
原创 C++模板特化实战:在使用开源库boost::geometry::index::rtree时,用特化来让其支持自己的数据类型
【代码】C++模板特化实战:在使用开源库时,用特化来增加功能。
2024-11-13 13:59:29
526
原创 偏特化的一种使用方法
泛化版本中,第二个表达式直接用void,它的作用就是为了让偏特化版本利用第二个表达式进行约束。使用的时候,不要实例化第二个表达式。
2024-11-13 12:30:24
194
原创 批处理读取注册表,调用Advanced Installer15.1创建安装包
【代码】批处理读取注册表,调用Advanced Installer15.1创建安装包。
2024-11-13 12:10:20
112
原创 饰面(veneer)
饰面(veneer)_veneer 汇编-优快云博客 模板化继承、泛型继承、Veneers的概念解析_getdlgitemtextlength-优快云博客
2024-08-03 00:45:56
251
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人