avatar
文章
107
标签
40
分类
34

Home
Tags
Categories
Music
港乐Live Show
Eden Mo Blog
搜索
Home
Tags
Categories
Music
港乐Live Show

Eden Mo Blog

(Private)巧思设计:基于任意对象的日志打印设计
发表于2025-03-27|Private Content
103c704d716c2a6b4b59a60c7b698e01e267a92d601a60f130246c8b57cc624a003856e3d418a0f461510530aabe27de357c3c56037bc9ce191314c495c6c1714fbf8efc9b427c0491c5c978a7861b748bdab2c41c43fe1b842056241317123a7fff4bb9e0e27fc9b212a04545d21f4c46a954ab65a678fcb60d640c871be6fe9d83491bc34b2625dd65be1558c7d68907a211232efcbff63266f1bec2426119f26c5d6a55ee3dff2b1ca911ec8ecc05a072f0d36fcb8412d57a876092ed44d4f8d1ea667d82bf10633ad087a98db3eb3354d39ce35f37470d8580c05e12ad0d8de5f3b5a93500db31c6fba0a2cad211fdf110f61f51da50f ...
C++ 14 读写锁
发表于2025-03-13|CPP|C++高阶•读写锁
C++读写锁 C++14引入了shared_mutex,允许使用shared_lock来进行并发读取操作,大幅度提高读线程的吞吐量,对于写操作仍然使用unique_lock独占锁维护数据安全,因为读写锁始终是共享一把锁,虽然读线程间没有了竞态条件,但写线程仍然需要和读、写线程同时竞争锁,而且读写锁一般开销大于普通互斥锁。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364#include <iostream>#include <vector>#include <shared_mutex>#include <mutex>#include <thread>#include <functional>#include <chrono>using namespace std;class Person{private ...
Qt Core Application:元对象/属性系统/反射
发表于2025-03-03|C++ Qt开发|C++ Qt
有限的RTTI 运行时类型信息(Run-Time Type Info,RTTI)是C++等静态语言的一个重要特性,C++的类型检查基本在编译期完成,仅提供了typeid、dynamic_cast两种用于支持运行时的类型信息,它们在前面的文章介绍过了:typeid用于获取类名,然而在不同的编译平台上这个方法得到的结果并不统一,尤其是gcc、clang等平台,需要进行转换;dynamic_cast常用于避免大指针去操控小内存(例如子类指针去操作父类),这是非安全的下行转换行为; 可见C++对RTTI的支持实在非常有限,而恰巧Qt中对RTTI的需求是较高的,例如一个基类指针Animal* 去保存若干派生类如Monkey* 、 Panda*,一旦编译完成,在已编译信息中就无法区分哪些函数、成员变量是属于哪个类的了,C++ RTTI唯一可以做的是通过上述typeid获取到其类名,而不能特别地访问某些类成员变量或者函数,莫谈如何操作;但同为静态语言的Java、C#等就有强大的RTTI支持,乃至成为其引以为傲的动态特性,这种支持运行时动态创建、访问类型的特性,称为反射(Reflectio ...
C++ 11 线程池
发表于2025-02-28|CPP|C++高阶•线程池
单任务队列线程池 C++ 11引入了五个头文件用于支持多线程编程,但是在很多场合下,工作的子任务往往是循环往复的,因此产生了线程池的应用,线程池一个重要的初衷就是希望将线程成池管理起来,由我们去控制它的分配和使用,需要时取出线程分配使用,当线程结束时它能够被重新回到池中复用。在搜寻相关资料时看到一篇通俗易懂的文章,这部分的代码参考自原文,对语法糖不熟悉的可以移步学习。 其基本工作流如下: 积木一:安全队列 安全队列是一个带锁的FIFO结构,用于管理各种任务的出入: 1234567891011121314151617181920212223242526272829303132333435template<typename T>class SafeQueue{private: mutex qlock; queue<T> m_queue;public: SafeQueue(){} SafeQueue(SafeQueue&& otherQueue){} ~Saf ...
Qt TCP Socket与WebSocket
发表于2025-02-22|C++ Qt开发|C++ Qt•Qt网络编程
网络通信是Qt框架的常见应用,本文以TCP和WebSocket为例介绍了二者实现信息收发的基本方法和细节,可以作为初始开发的基本demo,采用cmake方法管理基本文件依赖关系,本文暂不涉及界面开发部分,直接基于QObject而不是QWidget。 前置环境说明 在Linux环境下进行网络通信实验是比较方便的,Windows下则需要一些步骤去适配动态库差异,本文兼顾了两个系统运行,所以某些步骤对Linux环境可能是多余的,本文采用mingw来编译工程,应该提前检查环境变量,并且在Qt Creator-帮助-关于插件-搜索cmake勾选"load"。 Ubuntu防火墙检查 首次使用某端口进行通信时,常常需要打开防火墙,windows会有弹窗提示,点击允许即可,linux则使用ufw检查: 1234567891011sudo ufw statussudo ufw allow 8887 #开放端口sudo ufw enable #启动防火墙sudo ufw reload #重新加载规则sudo ufw status #端口已经更新## 其余规则sudo ufw delete al ...
设计模式(三):简单工厂模式、工厂模式、抽象工厂模式
发表于2025-02-15|设计模式|C++高阶•设计模式
简单工厂模式 简单工厂模式的设计是当我们需要各种各样的产品时,只需要在工厂新建一条产线,让工厂进行产品供给,而无需用户侧关心产品的制作细节,仅需要根据类型向工厂下订单即可。换到程序设计的语言,也即用户需要不同的产品类,这些产品类都具有相同功能、特性不同的接口,仅需要向工厂类提供类型,由工厂类进行分配,对工厂类而言,也不过是多了一个case去包含这个产品,实现了类间的松耦合。 简单工厂模式的角色为几类: 抽象产品类:相当于提供给工厂统一接口,具体特性接口由产品自身override; 具体产品类:提供不同的类特性和接口; 唯一工厂类:工厂类负责生产各种各样的产品; 由描述可知C++ 虚函数多态可以完成实现,以下: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677#include <iostream>using name ...
设计模式(二):单例模式
发表于2025-02-13|设计模式|C++高阶•设计模式
单例模式 保证一个类仅提供一个实例,并且通过此唯一实例提供类数据的全局访问,该模式被称为单例模式,单例模式常常应用于仅需单一对象的任务,例如打印时仅有一个打印上下文对象、写入文件时仅提供一个对象防止繁琐的同步机制等。 为了实现这种特性,单例模式的类采用了: 私有化的构造函数:禁止在类外实例化类对象; 禁用的拷贝、赋值构造函数:防止出现第二个实例; 单例模式的另一个初衷是避免单一实例反复构造和析构带来大量的开销,且通过类名即可访问,因此单例模式采用了静态成员变量对象,为了操作这个静态成员变量提供了公共的静态成员函数接口,通过此函数向类外提供静态对象。 一个单例模式的类如下: 12345678910class Singleton{public: Singleton(const Singleton& obj) = delete; Singleton& operator=(const Singleton& obj) = delete; static Singleton* getInstance();private: ...
OpenCV C++记录(八):Sobel、Scharr、Laplacian、Canny算子
发表于2025-02-06|OpenCV|C++高阶•OpenCV
Sobel算子 Sobel算子是一种边缘检测算子,由Irwin Sobel在1968斯坦福的博士生讨论会提出,在那个不重视论文和专利的年代,作者也没有为此发表论文,只在后来一本专著中公开,从此广泛被学界和工业界引用了几十年。 图像处理中经典的3阶Sobel卷积核常常表述为x方向和y方向,分别为: 此处我们发现零行两侧的系数恰好是相反数,尽管一些博客中矩阵调换了两侧符号顺序,只影响差分顺序,并不影响最终的差分结果。 Sobel算子的推导我查阅了大量博客资料,发现大多摘自电子科大彭真明教授的Sobel算子的数学基础,彭教授的参考来自文献,主要问题来自公式解读不同,以此图为坐标系: 原文公式为: 其中(1,1)、(-1,1)、(0,1)、(1,0)来自四个方向相邻点的方向向量,既然仅考虑了相邻点,所以这里是一种前向差分,前向差分表述为: 对于四分一、二分一,这里彭教授认为是一种城市距离(city-block distance),几种常见距离定义如下图: 距离定义 根据文献意图,四个方向梯度计算完成,还需要除以4以获取平均梯度,浮点数的矩阵运算是麻 ...
OpenCV C++记录(七):霍夫变换、仿射变换、透视变换
发表于2025-01-30|OpenCV|C++高阶•OpenCV
霍夫变换(Hough Transform) 霍夫变换只是一种特征变换,服务于图像霍夫直线、圆的检测,这两种图形是霍夫变换最常用的两个应用,也算基本图形,基于此扩展霍夫检测能识别图像中几乎所有的几何图形。 对人而言判断一条直线或者某种图形是非常直接简单的,而对于计算机而言,它获取的信息是像素,如何确定某一群像素就是一条共线的直线、一个圆形,如果出现像素外溢,如何辨认出这种偏差影响,是比较复杂的任务,也是霍夫变换的基本任务。 霍夫直线检测基本原理 假设给定两点像素坐标(x1,y1)和(x2,y2),可知过两点得到一条直线y = kx + b,这是笛卡尔空间的表达式,重新描述这个表达式: b = -xk + y,自变量为k、因变量为b,该空间称为霍夫空间,对于笛卡尔坐标的两点(x1,y1)和(x2,y2),分别对应b = -x1k + y1和b = -x2k + y2,即对应霍夫空间两条线,且x1不等于x2的情况下(相等的情况后文再讨论),两条霍夫空间直线必然交与一点,该点(b0,k0)同时满足两条霍夫直线方程,故知(b0,k0)就是原式y = kx + b的解。 因此,一句话表 ...
OpenCV C++记录(六):轮廓提取
发表于2025-01-26|OpenCV|C++高阶•OpenCV
OpenCV轮廓 轮廓提取任务是许多图像分析、识别的必要步骤,前置工作是将灰度图进行二值化,然后基于二值化图进行轮廓提取,本文记录了OpenCV一系列轮廓相关的分析手段,包括基本轮廓提取、绘制、外接多边形/椭圆/圆、多轮廓的交、并、差填充等。 轮廓提取与绘制 cv提供了强大的基本轮廓识别和绘制功能: 123456789101112131415161718192021222324void cv::findContours(InputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point())参数:image:输入的二值图像contours:轮廓信息,一般为点的二维vector,第一维是数组,代表第i个轮廓的点集,第二维是某个轮廓的第j个点hierarchy:轮廓层次信息,一般是关于Vec4i的vector,第一维代表第i个轮廓;第 ...
123…11
avatar
Eden
不做前端所以博客不漂亮,纯免费授权码来自公众号:归零者星的日与夜
文章
107
标签
40
分类
34
Follow Me
公告
文章任何错误、疏漏、建议麻烦请联系博主qq邮箱2436444815@qq.com
最新文章
OpenCV C++记录(十一):Mat数据规范化、灰度直方图与均衡算法2025-05-15
OpenCV C++记录(十):形态学处理基础2025-05-12
OpenCV C++记录(九):二值化与图像模糊(滤波)算法2025-05-08
C++ Generic Programming:SFINAF与类型萃取2025-04-26
Modern C++ Design(第二章):Techniques2025-04-20
分类
  • C20
  • C++ Qt开发7
  • C/C++14
  • CPP14
    • C++ Generic Programming3
  • FPGA2
    • verilog2
  • Linux23
标签
3D目标检测 Linux 信号与系统 网络编程 Linux扩容 MIT6.S081 Vivado IP核 读写锁 OpenCV Modern C++ Design 数据结构与算法 引导程序 C++ Generic Programming MathType快捷键 Private Content Stanford CS144 格式化输出 内存管理理论 进程与线程 数据库 Protobuf C++ Qt C++ SFINAF and Type Traits json序列化 C++11 新特性 设计模式 C++基础 高等数学 Effective C++ 奇奇怪怪的实现 Markdown语法 CSAPP 计算机网络理论 线程池 Qt网络编程 vim使用 C++高阶 CMake Git基本使用 MCU开发
归档
  • 五月 20253
  • 四月 20254
  • 三月 20256
  • 二月 20255
  • 一月 20257
  • 十二月 20248
  • 十一月 20242
  • 十月 20245
网站资讯
文章数目 :
107
本站总字数 :
473.9k
本站访客数 :
本站总访问量 :
最后更新时间 :
©2023 - 2025 By Eden
框架 Nodejs|你忘掉理想 只能忙于生活吗
粤公网安备 44010602011738号|粤ICP备2023072610号
搜索
数据库加载中