<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[a4364634611的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/a4364634611</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; a4364634611]]></copyright><item><title><![CDATA[zxing-cpp+OpenCV根据字符串生成条形码]]></title><link>https://blog.youkuaiyun.com/a4364634611/article/details/140120736</link><guid>https://blog.youkuaiyun.com/a4364634611/article/details/140120736</guid><author>a4364634611</author><pubDate>Tue, 02 Jul 2024 10:50:40 +0800</pubDate><description><![CDATA[成 PDF417 条形码：

创建一个 `MultiFormatWriter` 对象，指定条形码格式为PDF417。]]></description><category></category></item><item><title><![CDATA[C++20 闩与屏障]]></title><link>https://blog.youkuaiyun.com/a4364634611/article/details/139442793</link><guid>https://blog.youkuaiyun.com/a4364634611/article/details/139442793</guid><author>a4364634611</author><pubDate>Tue, 04 Jun 2024 14:45:23 +0800</pubDate><description><![CDATA[最大的不同是，前者可以在阶段完成之后将计数重置为构造时传递的值，而后者只能减少计数。线程可以阻塞，直到 latch 对象的计数减少到零。的功能受限，通常用于简单直接的需求，不少情况很多同步设施都能完成你的需求，在这个时候请考虑。以此类推，因为我们分配给每个线程的输出任务就是如此，然后利用了屏障一轮一轮地打印。的计数不可增加，它的使用通常非常简单，可以用来划分任务执行的工作区间。，它是 C++20 引入的，此处是确保输出流在多线程环境中同步，它将所有后继阶段的初始期待计数减少一，当前阶段的期待计数也减少一。]]></description><category></category></item><item><title><![CDATA[std::thread 的构造-源码解析]]></title><link>https://blog.youkuaiyun.com/a4364634611/article/details/136647392</link><guid>https://blog.youkuaiyun.com/a4364634611/article/details/136647392</guid><author>a4364634611</author><pubDate>Tue, 12 Mar 2024 11:35:39 +0800</pubDate><description><![CDATA[需要注意，libstdc++ 和 libc++ 可能不同，就比如它们 64位环境下的结果就是8，它们的实现只保有一个线程 ID。我们这里的源码解析涉及到的 C++ 技术很多，我们也没办法每一个都单独讲，那会显得文章很冗长，而且也不是重点。相信你也感受到了，不会模板，你阅读标准库源码，是无稽之谈，市面上很多教程教学，教导一些实现容器，过度简化了，真要去出错了去看标准库的代码，那是不现实的。现代C++模板教程。_Thr_Thrd_t_Startdecay_t_Invoke现代C++模板教程。]]></description><category></category></item><item><title><![CDATA[模板元编程计算1-n的和]]></title><link>https://blog.youkuaiyun.com/a4364634611/article/details/128240169</link><guid>https://blog.youkuaiyun.com/a4364634611/article/details/128240169</guid><author>a4364634611</author><pubDate>Thu, 08 Dec 2022 17:01:41 +0800</pubDate><description><![CDATA[【代码】模板元编程计算1-n的和。]]></description><category></category></item><item><title><![CDATA[现代C++20遍历tuple能有多优美？]]></title><link>https://blog.youkuaiyun.com/a4364634611/article/details/128104161</link><guid>https://blog.youkuaiyun.com/a4364634611/article/details/128104161</guid><author>a4364634611</author><pubDate>Tue, 29 Nov 2022 19:56:01 +0800</pubDate><description><![CDATA[得益于std::index_sequence，折叠表达式，和C++20的带模板形参lambda，我们可以用仅仅这么点代码就遍历完成。如果想做除了打印的别的事情，可以写一个传函数的版本，如下。]]></description><category></category></item><item><title><![CDATA[C++获取虚指针手动调用虚函数]]></title><link>https://blog.youkuaiyun.com/a4364634611/article/details/127853985</link><guid>https://blog.youkuaiyun.com/a4364634611/article/details/127853985</guid><author>a4364634611</author><pubDate>Mon, 14 Nov 2022 19:46:27 +0800</pubDate><description><![CDATA[vs2022下成功运行，你可能会觉得很怪异，居然要用三级指针，我甚至去测了一下，vs2017是一级，vs2019是二级，好了，大家知道个这么事情就好。]]></description><category></category></item><item><title><![CDATA[C函数定义]]></title><link>https://blog.youkuaiyun.com/a4364634611/article/details/127827350</link><guid>https://blog.youkuaiyun.com/a4364634611/article/details/127827350</guid><author>a4364634611</author><pubDate>Sat, 12 Nov 2022 23:45:51 +0800</pubDate><description><![CDATA[{a : b;}C89max(a , b) // a 和 b 拥有 int 类型，返回类型为 int {a : b;}C89 中，说明符与限定符是可选的，若省略它，则函数返回类型默认为 int （可由声明符修改）。另外，旧式定义不要求在声明列表中声明每个参数。任何缺少声明的参数拥有 int 类型但是也可以使用正常的我们现在使用的风格a : b;}C23不同于函数声明，不允许无名形参（否则旧式 (K&R) 函数定义中会有冲突），即使不在函数中使用也必须命名它们。]]></description><category></category></item><item><title><![CDATA[C++单例模式]]></title><link>https://blog.youkuaiyun.com/a4364634611/article/details/127814810</link><guid>https://blog.youkuaiyun.com/a4364634611/article/details/127814810</guid><author>a4364634611</author><pubDate>Fri, 11 Nov 2022 23:14:24 +0800</pubDate><description><![CDATA[单例模式指在整个系统生命周期里，保证一个类只能产生一个实例，确保该类的唯一性。]]></description><category></category></item><item><title><![CDATA[C++在main函数之前执行初始化函数]]></title><link>https://blog.youkuaiyun.com/a4364634611/article/details/127812956</link><guid>https://blog.youkuaiyun.com/a4364634611/article/details/127812956</guid><author>a4364634611</author><pubDate>Fri, 11 Nov 2022 20:52:12 +0800</pubDate><description><![CDATA[【代码】C++在main函数之前执行初始化函数。]]></description><category></category></item><item><title><![CDATA[printf是用户调用还是系统调用？]]></title><link>https://blog.youkuaiyun.com/a4364634611/article/details/127812938</link><guid>https://blog.youkuaiyun.com/a4364634611/article/details/127812938</guid><author>a4364634611</author><pubDate>Fri, 11 Nov 2022 20:47:54 +0800</pubDate><description><![CDATA[首先 printf显然不是系统调用，printf用户调用，然后执行封装例程中的int 0x80指令，到此都是，然后再进入内核。]]></description><category></category></item><item><title><![CDATA[C++11alignas 说明符和alignof 运算符和内存对齐问题]]></title><link>https://blog.youkuaiyun.com/a4364634611/article/details/127777485</link><guid>https://blog.youkuaiyun.com/a4364634611/article/details/127777485</guid><author>a4364634611</author><pubDate>Wed, 09 Nov 2022 20:54:30 +0800</pubDate><description><![CDATA[alignas()alignas()alignas(...)1) 表达式 必须是求值为零或合法的或扩展对齐的。2) 等价于 alignas(alignof(类型标识))3) 等价于对同一说明应用多个 alignas 说明符，逐个对应于的各个成员，形参包可以是类型或非类型形参包。]]></description><category></category></item><item><title><![CDATA[C++20管道运算符]]></title><link>https://blog.youkuaiyun.com/a4364634611/article/details/127764600</link><guid>https://blog.youkuaiyun.com/a4364634611/article/details/127764600</guid><author>a4364634611</author><pubDate>Wed, 09 Nov 2022 10:35:13 +0800</pubDate><description><![CDATA[管道运算符调用的函数并不会改变原来的序列，这一点需要注意。虽然管道运算符相比传统的函数式看着要更加抽象，但是其实如果你真正的去使用了解，倒也是挺优雅的概念库 (C++20) - cppreference.com范围库 (C++20) - cppreference.com。]]></description><category></category></item><item><title><![CDATA[C++使用boost.serialization序列化与反序列化]]></title><link>https://blog.youkuaiyun.com/a4364634611/article/details/127729352</link><guid>https://blog.youkuaiyun.com/a4364634611/article/details/127729352</guid><author>a4364634611</author><pubDate>Mon, 07 Nov 2022 13:34:52 +0800</pubDate><description><![CDATA[侵入式序列化，非侵入式序列化
虽然看着有些长，但是请各位要注意，这是两个例子，分别介绍基本的普通类序列化与子类序列化，并反序列化

反序列化的代码其实都一样(只是把对象A改成了B)修改了构造函数传参。

特别关注

template
void serialize(Archive& ar, const unsigned int version)

我们在后面都会用到

序列化STL容器]]></description><category></category></item><item><title><![CDATA[C++成员指针]]></title><link>https://blog.youkuaiyun.com/a4364634611/article/details/127712744</link><guid>https://blog.youkuaiyun.com/a4364634611/article/details/127712744</guid><author>a4364634611</author><pubDate>Sun, 06 Nov 2022 10:42:12 +0800</pubDate><description><![CDATA[相信如果学习过模板的开发者们都觉得这样全部写明实在太不优雅了，我们一般写自然也不会写成这样的，使用模板会方便的多，但是为了新鲜的开发者们学习难度，我们使用的最简单直接的方式，全部写明参数来介绍。如果有兴趣的话可以看看本人前面说的bind的实现，是如何不写明类型接收参数的。如果还有疑问，可以阅读cppref成员访问运算符 - cppreference.comC++实现std::bind_归故里@的博客-优快云博客【代码】C++实现std::bind。]]></description><category></category></item><item><title><![CDATA[C++实现std::bind]]></title><link>https://blog.youkuaiyun.com/a4364634611/article/details/127709198</link><guid>https://blog.youkuaiyun.com/a4364634611/article/details/127709198</guid><author>a4364634611</author><pubDate>Sat, 05 Nov 2022 21:22:56 +0800</pubDate><description><![CDATA[【代码】C++实现std::bind。
我们用最简单的方式完成它的功能，即requires和lambda，只需要三个函数重载即可]]></description><category></category></item><item><title><![CDATA[C++实现max,min,sum,bind]]></title><link>https://blog.youkuaiyun.com/a4364634611/article/details/127697182</link><guid>https://blog.youkuaiyun.com/a4364634611/article/details/127697182</guid><author>a4364634611</author><pubDate>Fri, 04 Nov 2022 21:57:26 +0800</pubDate><description><![CDATA[【代码】C++实现max,min,sum,bind。
这些实现非常简单，甚至不能说实现，只是“包装”，“套壳”，但是总而言之能不自己写就不要自己写。
在visual studio2022下编译通过，还使用了三方库fmt，链接如下:
首先你需要学习过模板，再学习过形参包,constexpr，lambda，可变参数，折叠表达式，完美转发，右值引用，约束与概念，然后就可以了，非常的简单

记得打开编译器的c++20选项

单元测试如下:]]></description><category></category></item><item><title><![CDATA[C++new表达式]]></title><link>https://blog.youkuaiyun.com/a4364634611/article/details/127644919</link><guid>https://blog.youkuaiyun.com/a4364634611/article/details/127644919</guid><author>a4364634611</author><pubDate>Wed, 02 Nov 2022 08:43:15 +0800</pubDate><description><![CDATA[如果提供了 布置参数，那么它们会作为额外实参传递给分配函数。这些分配函数被称作“布置 new”，这来源于标准分配函数 void*, void*)，它直接返回未更改的第二实参。它被用于在已分配的存储中构造对象。我们一般提起new一般默认是想说申请动态内存的，那么new做了什么事情?operator new[]是同理，不再强调。第三和第三种其实也没什么区别，类型加了个括号。1和2都是动态申请内存的，并没有多大区别。]]></description><category></category></item><item><title><![CDATA[C#和Python使用C++编译的dll]]></title><link>https://blog.youkuaiyun.com/a4364634611/article/details/127609542</link><guid>https://blog.youkuaiyun.com/a4364634611/article/details/127609542</guid><author>a4364634611</author><pubDate>Mon, 31 Oct 2022 09:51:58 +0800</pubDate><description><![CDATA[因为是显示链接，所以只需要获得生成的dll即可因为C#无法直接调用C++的dll，所以我们使用了使用vs自带的工具查看dll导出符号名称确保导出符号名是正确的(和函数名称一致)再进行下一步操作。]]></description><category></category></item><item><title><![CDATA[C++使用WindowsAPI显式链接dll]]></title><link>https://blog.youkuaiyun.com/a4364634611/article/details/127606315</link><guid>https://blog.youkuaiyun.com/a4364634611/article/details/127606315</guid><author>a4364634611</author><pubDate>Sun, 30 Oct 2022 22:22:46 +0800</pubDate><description><![CDATA[假设你已经准备好了一个dll，且没有使用.def文件修改导出的函数符号名的话。首先各位需要准备好一个编译好的dll，不需要有.h文件或.lib。代码非常的简单，如果有任何的疑问都可查阅微软文档。那么现在，我们就可以编写代码了。显式链接只需要dll即可。我们就需要使用vs的工具。]]></description><category></category></item><item><title><![CDATA[OpenCV C++录制视频录制与播放]]></title><link>https://blog.youkuaiyun.com/a4364634611/article/details/127599045</link><guid>https://blog.youkuaiyun.com/a4364634611/article/details/127599045</guid><author>a4364634611</author><pubDate>Sun, 30 Oct 2022 14:11:34 +0800</pubDate><description><![CDATA[/打开视频文件cv::VideoCapture capture("./video/蕾姆海边.mp4");//isOpen判断视频是否打开成功if (!return -1;}//获取视频帧频std::cout ]]></description><category></category></item></channel></rss>