- 博客(384)
- 资源 (1)
- 收藏
- 关注
原创 C++/OpenCV:Mat初始化赋值误区
一直以为下面这样会将每个通道均初始化为1,导致一个bug调了半天根本没有怀疑过这里。连deepseek和chatgpt也这样说,实际上只会对一个通道初始化。
2025-03-11 16:00:22
282
原创 C++:定义函数指针类型
在 C++ 中,可以使用using或typedef来定义函数指针类型。对于类型的函数指针,可以通过using来定义一个别名,使代码更简洁和易于理解。
2024-11-28 14:13:50
282
原创 C++:使用CRTP代替虚函数实现静态多态的效果
它是一种通过模板实现静态多态的方法。在这个模式中,基类使用其派生类作为模板参数,从而实现类似虚函数的行为,但没有动态多态的开销。
2024-11-26 15:49:39
296
原创 C++:final 关键字用于阻止类被继承或阻止虚函数被进一步重写
可以增强代码的可维护性和安全性,是设计意图清晰表达的重要工具。关键字,用于阻止类被继承或阻止虚函数被进一步重写。时,派生类中试图重写该虚函数会导致编译错误。时,尝试继承该类会导致编译错误。
2024-11-26 15:06:58
348
原创 C++:对象切片原理解析、示例与最佳实践
对象切片(Object Slicing)是 C++ 中的一种行为,发生在基类和派生类之间的赋值或传递操作中。当派生类对象赋值或传递给基类对象时,派生类的特有部分会被“切掉”,只保留基类的成员数据。这是因为基类只能容纳基类定义的成员,而派生类的扩展部分超出了基类的内存范围。通过这些策略,可以有效避免对象切片问题,确保程序正确性和可维护性。或私有化拷贝构造函数和赋值运算符,避免基类对象拷贝。通过指针或引用传递对象,确保完整的对象保持有效。管理基类指针,减少直接操作。
2024-11-26 14:15:05
398
原创 C++:不推荐在构造函数和析构函数中调用虚函数
在构造函数和析构函数中调用虚函数会导致动态绑定失效。这是由于对象的构造和析构过程中,虚表指针 (vptr) 尚未设置或已重置。为避免问题,推荐推迟虚函数的调用,或使用非虚函数替代设计。
2024-11-26 10:35:38
353
原创 C++:设计模式-单例模式
通过方法获取单例实例,这是调用饿汉式单例的标准方式。由于饿汉式实例在程序启动时就被创建,所以你不需要显式地进行实例化操作。饿汉式:简单,适合不需要延迟初始化的场景,程序启动时就创建实例。懒汉式:适合需要延迟初始化的场景,但需要考虑线程安全。线程安全懒汉式:通过加锁保证线程安全,但可能带来性能开销。双重检查锁:线程安全,减少了加锁的频率,但实现复杂。静态局部变量:线程安全,简洁,现代 C++ 中推荐的单例实现方式。在现代 C++ 中,静态局部变量。
2024-11-22 15:44:44
2045
原创 C++:向std::function注册回调函数
普通函数可以直接传递给,因为它的签名与匹配。函数指针也可以传递给,需要使用函数指针的类型。成员函数需要额外处理,因为成员函数是与对象实例相关的,通常通过 lambda 捕获对象实例来注册成员函数。这些方式都可以将一个函数注册到回调中,具体选择哪种方式取决于你的需求(例如是否需要成员函数或者函数指针)。你不能直接将成员函数传递给,因为成员函数需要一个对象实例来调用。可以使用std::bind或 lambda 表达式来绑定成员函数和对象实例,从而解决这个问题。
2024-11-22 14:19:36
866
原创 C++:operator new/delete函数
它们是由标准库提供的,可以用于动态内存分配和释放。如果一个类没有显式定义自己的。除了类的自定义版本,可以重载全局范围的。默认情况下,所有类都使用全局范围的。,默认的全局版本会被使用。,从而覆盖默认行为。
2024-11-21 14:51:49
840
原创 C++:友元函数介绍
https://blog.youkuaiyun.com/cd_yourheart/article/details/118962490[上一篇]友元函数是 C++ 中的一种特殊函数,它可以访问类的私有成员和保护成员,而不需要是该类的成员函数。友元机制允许在不破坏封装的情况下为类提供额外的功能。访问权限:定义方式:作用域:不受继承影响:输出:友元函数的优缺点优点:灵活性:可以为非成员函数提供访问类私有成员的能力,增加代码的灵活性。扩展性:可以将与类紧密相关的功能封装到独立的函数中,而不强制将其作为类的成员。
2024-11-21 10:17:52
977
原创 C++:实例访问静态成员函数和类访问静态成员函数有什么区别
在 C++ 中,通过和通过在功能上没有本质区别,因为静态成员函数属于类,而不属于某个具体的实例。无论通过类名还是实例调用,静态成员函数的行为都是相同的。但是,它们之间有以下几点thisthis。
2024-11-21 09:55:33
396
原创 C++:捕获 shared_from_this()和捕获this的区别
如果对象生命周期由管理,建议使用 shared_from_this(),因为它可以确保对象在回调中存活。如果对象生命周期完全受控,且明确保证事件回调执行时对象一定存活,可以选择效率更高的捕获this。
2024-11-20 16:39:09
459
原创 C++:shared_from_this()应用在异步任务中的应用
的主要用途是安全地创建实例来管理当前对象的生命周期,确保对象在异步任务或新线程中不会在使用过程中被销毁。
2024-11-20 15:30:07
357
原创 C++:boost库安装
当你需要快速开发高质量的 C++ 项目时,Boost 提供了大量经过验证的、易于使用的解决方案。对于那些需要现代 C++ 特性和跨平台支持的项目,Boost 是一个强大的选择。在需要快速实验和实现复杂功能时,Boost 提供的工具和功能能让你专注于实现业务逻辑,而非底层细节。总之,Boost 是一个功能强大、灵活且稳定的工具库,可以显著提升 C++ 项目的开发效率和代码质量。
2024-11-17 16:13:46
1145
原创 python安装包报错
后来想了想ssl怎么有问题,突然想到开了梯子,把梯子关了就正常了。想不明白,就直接下载了whl,Windows安装whl。如果你的 Python 安装是通过。: 假设你下载的文件名是。
2024-11-14 14:01:05
180
原创 Dependencies 工具
Dependencies` 是一个实用的工具,用于分析 Windows PE 文件(例如 `.exe`、`.dll`、`.sys` 等)中依赖的库和函数。- 与旧版 `Dependency Walker` 不同,`Dependencies` 支持 Windows 10 及以上系统的现代特性,比如对应用程序清单文件、延迟加载 `DLL` 的支持等。### 8. **处理 `x86`、`x64` 和 `ARM` 架构的文件**### 3. **检查 `DLL` 版本和路径**
2024-11-11 17:12:49
1016
原创 使用TeamViewer远程局域网内的两台电脑
有个场景,有人还不知道TV可以局域网操作,记录一下。主要就是修改设置,将取消激活改为接受。然后输入受控端的ip即可。
2024-10-15 14:20:59
654
原创 CMake/C++:一个日志库spdlog
然后直接使用visual studio 打开CMakelists,然后编译一下。这个库可以直接包含头文件使用,推荐。项目中自带了一个例子,运行一下。先将仓库clone一下。
2024-09-07 11:35:12
375
原创 VS2019+QT VS tools:Debug下ok,relese下报错
尝试卸载原来的QT VS tools:卸载方法,到下面文件夹下可以看到有两个文件夹,分别是两个插件,找到QT的插件,删除文件夹即可。但是删除之后安装新版本的插件还是安装不上,只好再把原来的版本装回去,安装简单,点击下载好的插件即可安装。将Qt Project Setting中Run Deployment Tool选项置为是解决。(可能的原因是我之前的QT是5,重装了QT6,在重装后相关配置发生了变化导致这个问题)尝试一下重装 QT VS tools,结果装不上。总之和上面踩的坑没关系。
2024-07-04 14:02:51
422
原创 C++:关于圆形鱼眼半全景图转为等距圆柱投影图
之前记录了立方体和360全景之间的转换,这次记录下鱼眼图与360全景图之间的转换。这里的360全景图其实指的是等距圆柱投影图。
2024-05-11 17:09:59
505
原创 C++:VS dump调试(2)
3、代码【有可能只有自己负责模块的代码,没有全部代码,但是基本调试也是只会用到自己部分的代码,别人的代码就不需要你来排查了】上图,dmp是客户现场反馈的,PDB文件夹下的pdb文件是从应用程序整体编译那里得到的。需要先导入符号文件的位置:可以从【调试】->【选项】找到,也可以在右上角那里直接找到。将pdb文件夹的路径添加进去,然后【使用仅限本机进行调试】1、需要dump文件【这个一般是客户现场收集的】2、对应的pdb文件【这个是软件编译时候生成的】之后会让你选择对应的源代码。然后直接打来dmp文件。
2024-04-08 20:03:38
714
原创 OpenCV/C++:点线面相关计算(二)
接续,继续更新OpenCV/C++:点线面相关计算_线面相交的点 代码计算-优快云博客OpenCV处理点线面的常用操作_线面相交的点 代码计算。
2024-02-05 17:52:45
699
原创 C++:关于360全景图像和立方体6面全景图像的相互转换
立方体6面全景图像是将全景图贴在正方体的6个面,全景图像分为6块,立方体左边正面右面展开为黄色,背面顶面和底面展开为蓝色。注意:这里的正面和背面是站在立方体内部观察的。展开后的全景图都是在立方体内部看到的画面。从球心向外引射线,与球面和立方体面的两个交点就是相同的点,这两个点对应的像素在没有误差的情况下是同一个。这两个点在其全景图中的UV坐标就是要求的转换。定义一个立方体,需要知道立方体的边长,中心坐标,8个顶点坐标,6个面的法向量。360全景图像,比较容易理解,转换后的360全景图。
2024-02-05 11:43:57
1296
原创 C++:使用tinyXML生成矢量图svg
使用tinyxml库就是按照svg的格式,将内容写为xml文件,其实也可以写为svg格式,直接打开就是图像。关于svg文件,SVG是基于XML的可扩展矢量图形,svg是xml文件,但是xml范围更广不一定是svg。直接将红框中的几个文件放到项目中即可使用。将xml后缀改为svg打开看看图片。很简单,去下面官网下载。
2024-01-24 10:51:48
1016
原创 OpenGL:关于渲染窗口在主屏和扩展屏上纹理贴图不一致的问题
自己写了一个例子,将图像纹理贴图到窗口,并且可以设置窗口的起始位置。查看一下自己主屏和扩展屏的分辨率,果然,主屏和副屏的缩放不一致。如果您使用的是多个显示器,请确保每个显示器的分辨率都正确。当设置渲染窗口在主屏时,渲染的结果如下。但是当设置窗口显示在扩展屏时,效果如下。修改之后再测试一下。可以看出纹理没有显示完整。
2024-01-19 17:13:24
550
原创 OpenGL:关于纹理映射时任意四边形中的插值问题(二)
上次是使用逆双线性插值的方法解决四边形纹理映射时产生的折痕问题。具体就是,和逆双线性一样,都不能使用OpenGL自带的插值。其实也有点问题,就是双线性插值会使得纹理产生一点扭曲。想达到纹理投影的效果,可以使用透视插值。关于将变换矩阵传给着色器的问题。就需要在着色器中修改。
2024-01-18 12:00:59
689
2
原创 OpenGL:关于纹理映射时任意四边形中的插值问题
但是,我纹理贴图时的纹理顶点有四个,由两个三角形组成,当两个三角形组成矩形时,没什么问题,当其中的某个顶点移动时,就变成下图右的情况,此时就出现了问题。但是上面还有点缺点,上面这种方式相当于没有使用OpenGL内部的插值,而是自己做的插值,就是找到uv坐标,直接去纹理中取对应像素值。在计算得到uv坐标后,可以接着进行一次双线性插值,这个插值,是在纹理中取值的这个过程中做的。关于双线性插值,就是给定一个四边形的四个顶点坐标和某个uv坐标,然后通过uv计算出UV坐标对应的顶点坐标插值坐标。效果可以,符合预期。
2024-01-17 18:09:10
843
原创 Blender:制作一个变形动画
下一步选中球,“物体数据属性”“形态键”“缩裹”修改值。添加了音频后要记得在这里将音频打开,输出才会有声音。然后把两个物体放在一起,放缩球,让球包含立方体。渲染为图像序列,然后将图像序列再次渲染为视频。然后在应用下拉箭头中选择“应用为形态键”之后可以在时间上为缩裹值添加不同的关键帧。之后选中球,为其添加修改器,缩裹。就是一个球逐渐地变为一个立方体。在渲染视频的时候可以添加音频。首先创建一个球和一个立方体。在这里选择缩裹对象为立方体。还可以为其添加棋盘格纹理。
2023-10-12 14:38:39
1156
转载 【Qt】问题解决:Unable to create a debugging engine.
原因:在安装 Visual Studio 2017 时,使用了默认设置,导致没有安装 Windows SDK 中的 Debugging Tools for Windows 包。版权声明:本文为优快云博主「kingkee」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。在 Qt 中打开Tools -> Options -> Kits,发现 Debugger 里面没用可用的调试器。3、在 Debugging Tools for Winodows 选项前打上勾。
2023-07-20 16:54:38
2927
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人