自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(305)
  • 收藏
  • 关注

原创 QT 中的元对象系统(五):QMetaObject::invokeMethod的使用和实现原理

的核心原理基于 Qt 的元对象系统。元对象系统是 Qt 实现信号槽机制、属性系统和动态调用的基础。每个继承自QObject且包含Q_OBJECT宏的类都有一个与之关联的对象,该对象存储了类的元数据,如类名、信号、槽、属性等信息。函数利用这些元数据,通过方法的名称或索引来查找并调用对象的方法。它可以在不同线程之间安全地调用方法,并且支持同步和异步调用。调用流程当调用1)查找元对象信息首先,函数会获取调用对象的对象。通过QObject的方法可以获取该对象的元数据。然后,根据传入的方法名称或索引,在。

2025-04-03 22:23:12 548 3

转载 QT 中的元对象系统(四):信号槽机制深入理解

信号槽(Signals and Slots)是 Qt 框架中用于对象间通信的核心机制,它为开发者提供了一种灵活、类型安全且高效的方式来实现对象间的交互。clicked()信号槽是观察者模式的一种实现,特性如下:A、一个信号就是一个能够被观察的事件,或者至少是事件已经发生的一种通知;B、一个槽就是一个观察者,通常就是在被观察的对象发生改变的时候——也可以说是信号发出的时候——被调用的函数;C、信号与槽的连接,形成一种观察者-被观察者的关系;D、当事件或者状态发生改变的时候,信号就会被发出;

2025-04-03 11:02:37 14 1

原创 WebSocket原理详解(二)

如果端点(客户端或服务器)收到了一个关闭帧,并且之前没有发送过关闭帧,则端点必须发送一个关闭帧作为响应。一个端点可以延迟发送响应直到它的当前消息发送完毕(例如,已经发送了大多数的消息片段,则端点可能会在发送关闭响应帧前先将剩下的消息帧发送出去)。当WebSocket接收方接收到一个数据帧时会根据FIN(数据帧中的一个标识,用来判断当前帧是否当前消息的最后一帧)的值来判断是否已经接收到消息的最后一个数据帧。,该部分表明了关闭的原因,例如:端点关闭、端点接收帧过大或端点收到的帧不符合预期。

2025-04-01 22:17:39 726 3

原创 设计模式之适配器模式(二):STL适配器

在计算机科学中,适配器 (Adapter)是一种设计模式,它允许将一个现有类的接口转换成另一种接口,以满足客户的期望。适配器模式通过封装一个对象,并提供一个新的接口来访问该对象的功能。适配器模式的核心思想是 "包装"。适配器类包含一个现有类的实例,并在其内部实现新的接口。当用户通过适配器的新接口调用方法时,适配器会将这些调用转换为对现有类实例的相应方法的调用。它定义了用户期望使用的接口,使得用户可以以一种统一的方式访问适配器的功能。

2025-03-30 09:05:35 882 6

原创 Qt之共享内存类QSharedMemory的使用及实现原理(全)

跨平台支持:对不同操作系统(如 Windows、Linux 等)的底层共享内存机制进行封装,屏蔽了各系统间的差异,为开发者提供统一的接口,方便在不同平台上实现进程间共享内存通信。简化操作:提供了创建、附加、分离、删除共享内存等操作的简单方法,降低了使用共享内存的复杂度,开发者无需深入了解底层系统调用细节。数据共享:允许不同进程或线程访问同一块物理内存区域,实现高效的数据共享,避免了数据在不同进程间的多次拷贝,提高了数据传输效率。从使用的角度来讲,尤其是在线程或进程间数据通信来讲还是非常方便的;

2025-03-28 16:08:25 1064

原创 双指针技巧在C++中的应用:从基础到进阶

在算法题中,双指针具有很多应用,那么在实际项目中,你有使用过双指针技巧吗?主要是什么场景?欢迎评论区交流讨论~推荐阅读滑动窗口算法详解:概念、应用与实例,-优快云博客C++合并两个有序数组-优快云博客。

2025-03-25 22:56:32 975 2

原创 C++合并两个有序数组

给两个按排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请 合并 nums2 到 nums1 中,使合并后的数组同样按排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n。分析:所谓可以理解为。

2025-03-23 22:14:14 312 4

原创 C++17之std::not_fn的使用和实现原理

std::not_fn接受一个可调用对象(如函数指针、函数对象或 lambda 表达式),并返回一个新的可调用对象。当调用这个新的可调用对象时,它会调用原始的可调用对象,并对其返回值进行逻辑取反操作。

2025-03-23 12:33:33 550 1

原创 Qt开发中的常见问题与解决方案

在网络应用程序中,保持TCP连接的稳定性非常重要。为了确保连接不会因为断电或非法关闭程序而中断,开发者可以自定义心跳包或启用系统层的保活机制。// 开启keepalive属性// 5秒内无数据交互则进行探测// 探测时间间隔为2秒// 探测重试次数通过设置这些参数,可以确保TCP连接在异常情况下能够及时断开,避免长时间的无响应。Qt提供了类来处理数据库查询结果。开发者可以通过继承来实现自定义的查询模型,例如修改某一列的字体颜色或样式。通过重写data。

2025-03-19 23:38:51 659 4

原创 QVariant:Qt中万能类型的使用与理解

对于自定义类型,需要将其注册到 Qt 的元对象系统中,以便QVariant能够处理。定义自定义类型// 定义自定义类型public:private:// 注册自定义类型// 存储自定义类型// 获取自定义类型return 0;QVariant转换// 定义自定义结构体int id;然后用Q_DECLARE_METATYPE(MyStruct)注册自定义结构体。

2025-03-17 22:30:11 1099 4

原创 SQLiteStudio:一款免费开源跨平台的SQLite管理工具

 SQLiteStudio 是一款专门用于管理 SQLite 数据库的图形化工具,由波兰开发者开发并维护。由于 SQLite 以其轻量级、零配置、嵌入式等特性被广泛应用于各种小型项目、移动应用和桌面应用中,而 SQLiteStudio 为用户提供了便捷的方式来管理这些 SQLite 数据库。

2025-03-11 22:27:58 1660 10

原创 一个超级经典的C++序列化&反射库:Cista

在 C++ 的世界里,序列化与反序列化是数据处理中极为重要的环节;而今天要给大家介绍的 Cista,就是在这个领域表现出色的一个库。它以高效、易用的特点,为开发者们提供了强大的支持。Cista(C++ Serialization and Transport Abstraction)是一个轻量级、零依赖的 C++ 序列化库。它的主要目标是提供高效且安全的序列化和反序列化功能,能够处理各种复杂的数据类型,包括自定义结构体、容器等。

2025-03-09 11:15:47 935 5

原创 详解memcpy的实现原理,可不只是逐个字节复制那么简单

memcpy的功能是将src指向的内存区域的前n个字节复制到dest指向的内存区域。使用memcpy,需要注意以下几点:不处理重叠区域(这是memmove的职责)返回目标地址destdest和src都是有效指针内存区域不重叠有足够的空间。

2025-03-08 21:46:37 409 3

原创 C++中使用相对目录的优缺点

最近在一个C++的项目中使用了相对目录,代码如下:在我自己的电脑上程序运行起来,在当前工作目录下可以生成logs目录,而且在logs目录下生成了日志文件ServiceTerminal.txt,但是在同事的电脑上,同样的代码,调试运行却不能生成ServiceTerminal.txt文件,然后在这行代码之前增加打印当前的工作目录代码:经过调试发现currentPath指向的工作目录不对,然后打开工程配置(vs2019工程)发现:调试环境的工作目录配置不对,修改后再次调试,可以生成ServiceTermin

2025-03-08 13:59:22 785 2

原创 C/C++获取结构体成员的偏移量

在 C++ 中,你可以使用标准库中的offsetof宏来获取结构体中某个成员变量相对于结构体起始地址的偏移量。offsetof宏定义在<cstddef>头文件中,它接受两个参数:结构体类型和结构体成员的名称,返回该成员相对于结构体起始位置的字节偏移量。// 定义一个结构体char a;int b;double c;// 获取结构体成员的偏移量return 0;

2025-03-06 20:04:07 1057 6

原创 C++20中的std::bind_front使用及原理分析

与其他替代方案的性能比较1. 与std::bind比较通常比std::bind性能更好,因为它避免了使用占位符带来的参数重排和额外的类型推导开销。std::bind在处理复杂的参数绑定情况时,可能会生成更复杂的代码,导致性能下降。2. 与 lambda 表达式比较简单场景:在简单的参数绑定场景下,和 lambda 表达式的性能相近。编译器对两者都可以进行一定程度的优化。复杂场景:如果需要更复杂的逻辑,例如捕获多个变量、进行条件判断等,lambda 表达式可能更灵活,但也可能会引入更多的代码复杂性。

2025-03-04 20:48:54 1090 8

原创 开源串口数据处理工具Serial Studio(附qml源码链接)

Serial Studio 是一款功能强大且易于使用的串口数据可视化工具。它跨平台的特性、多数据源的支持、高度的定制化能力以及完善的文档,使其成为各种数据采集和可视化项目的理想选择。其开源的特性也使得开发者可以根据自己的需求进行二次开发和定制,进一步拓展其功能。

2025-03-03 21:37:52 1254 3

原创 QT 中的元对象系统(三):QObject深入理解

QObject是 Qt 框架的核心组件,提供了丰富的功能和强大的灵活性,适用于从简单到复杂的各种应用程序开发需求。对象间通信:通过信号与槽机制实现松耦合的设计。内存管理:通过对象树自动管理资源。事件驱动:支持事件处理和扩展。国际化支持:简化多语言应用的开发。动态扩展性:支持动态属性和定时器。在实际开发中,QObject的功能被广泛应用于 GUI 开发、网络编程、嵌入式开发等多个领域。掌握QObject的核心特性对于高效使用 Qt 框架至关重要。

2025-03-03 15:09:14 1611 1

原创 QT 中的元对象系统(二):元对象实现原理QMetaObject

Qt 中的元对象系统,简单的可以分为以下几步:1.在继承 QObject 的类中使用 Q_OBJECT 宏,该宏定义了元对象和相关的方法2.进行 C++ 编译前,Qt 会运行 moc,解析带有 Q_OBJECT 宏的相关类的信息,生成moc文件,得到元数据并构造元对象3.将生成的文件和源文件一起编译Qt 元对象系统通过信号与槽机制、运行时类型信息、动态属性系统和国际化支持等功能,极大地增强了 C++ 的功能,使开发者能够更高效地构建复杂的应用程序。

2025-02-27 22:21:11 1040 8

原创 QT 中的元对象系统(一):元对象和元数据

Qt 作为跨平台的GUI框架,在实际项目中应用广泛,在日常的使用中,随手使用的一些机制(如著名的),属性(如),以及重载各种事件函数来完成定制化;还有中直接访问QObject的Property。等等,有了元系统,使得在掌握很少类内部信息都能完成类数据的获取和方法的调用。

2025-02-25 21:04:40 982 12

原创 提升效率的C++内存管理技巧

在某些场景下,需要频繁进行内存分配和释放,常规的内存分配方式(如new和delete)会带来显著的性能开销。这是因为每次调用new时,系统都需要在堆上查找合适的内存块,这涉及复杂的算法和系统调用,同样,delete操作也需要对释放的内存进行管理和回收。为了优化这种情况,内存池技术应运而生。内存池是一种内存管理机制,它预先分配一块较大的内存区域,作为内存池。当程序需要分配内存时,优先从内存池中获取,而不是向系统申请新的内存。当内存使用完毕后,也不立即归还给系统,而是将其放回内存池,以便后续再次使用。

2025-02-21 22:39:12 895 5

原创 CrossGuid:C++ 中的跨平台 GUID/UUID 生成库

CrossGuid 是一个轻量级、易于使用且跨平台的 C++ GUID/UUID 生成库。它提供了简单易用的 API,并符合 RFC 4122 标准。如果您正在寻找一个高效且易于使用的 GUID/UUID 生成库,那么 CrossGuid 是一个值得考虑的选择。CrossGuid 官方网站: https://github.com/graeme-hill/crossguid项目地址: https://gitcode.com/gh_mirrors/cr/crossguid。

2025-02-21 10:50:35 833 3

原创 C++ std::atomic可以使用复杂类型(类和结构体)吗

提供轻量、高效的原子操作,适用于不需要复杂锁机制的场景。同时需理解内存顺序对性能和正确性的影响。对于复杂的多操作组合,仍需谨慎处理竞态条件。不当使用load和store导致竞态条件、对内存顺序的误解、复合操作的不原子性。

2025-02-16 20:35:43 1321 16

原创 Qt中基于开源库QRencode生成二维码(附工程源码链接)

QRencode是一个开源的库,专门用于生成二维码(QR Code)。它支持多种编程语言的接口,包括C、C++、Python等。QR码是一种矩阵式二维码,常用于存储网址、联系信息、文字信息等,广泛应用于各种场景,如产品追踪、广告宣传、文档管理等。QRencode的设计简洁高效,提供了易于使用的API接口,使得开发者能够轻松地在应用程序中集成QR码生成和处理功能。

2025-02-16 14:19:51 1817 9

原创 Qt Creator 5.0.2 (Community)用久了突然变得很卡

很久没有用Qt Creator开发项目了,刚刚结束的项目又是用VS2019开发的;这两天刚好有时间去学习一下Qt,刚好要用Qt Creator,结果一打开就没反应,主界面显示出来要好几分钟,最明显的是在Qt Creator的各种鼠标、滚轮操作每做一次都要好几十秒,几乎卡死的情况。

2025-02-14 22:26:58 659 8

原创 Qt信号槽调用出错:Qt: Dead lock detected while activating a BlockingQueuedConnection

是一种信号与槽之间的连接类型,它用于在Qt的事件系统中同步线程间的通信。当你使用这种类型的连接时,发射信号的线程会阻塞,直到接收信号的槽函数执行完毕。这种机制在需要确保信号发射后某些操作必须完成的情况下非常有用,但它也可能导致死锁或性能问题,特别是当多个线程相互等待时。使用场景线程间同步:当你需要在不同线程间同步操作,并且希望确保一个线程的操作在另一个线程继续之前完成。确保顺序执行:在某些情况下,你可能需要确保槽函数的执行顺序与信号的发射顺序一致。注意事项死锁风险:使用。

2025-02-14 14:29:58 876 1

原创 C++ 洗牌函数std::shuffle的用法

是 C++ 标准库中用于对序列进行随机重排(洗牌)的一种算法。它可以将容器(例如std::array、或普通数组等)中的元素随机地打乱顺序,就像洗扑克牌一样。与早期的相比,要求使用一个随机数引擎(如),从而在提供更可控、更安全的随机生成方式的同时,也避免了潜在的随机质量问题。这个算法定义在头文件中,并且需要 C++11 或更高版本的支持。:可随机访问的迭代器类型(Random Access Iterator),例如指向std::array或内置数组的指针等。

2025-02-13 22:20:24 1346 4

原创 C++ Lambda 表达式的本质及原理分析

是一个匿名类,其捕获的变量存储为类的成员变量,调用时通过重载的operator()实现。值捕获是将外部变量的副本存储为类成员,引用捕获是将外部变量的引用存储为类成员。使用 Lambda 时,需要特别关注变量的生命周期和捕获方式,以避免未定义行为。Lambda 表达式在 C++ 中提供了极大的灵活性和简洁性,特别是在需要定义短小的回调函数或处理算法时。理解并熟练使用 Lambda 表达式可以显著提升代码的可读性和效率。

2025-01-27 22:34:44 2191 10

原创 C++标准线程库实现优雅退出的方式

spdlog一个非常好用的C++日志库(五): 源码分析之线程池thread_pool_spdlog源码分析-优快云博客log, //普通日志消息flush, //冲刷日志消息到目标(sink)terminate //终止线程池子线程(工作线程)// 析构函数不要抛出异常, 但释放线程池资源资源可能发生异常, 因此内部捕获并处理SPDLOG_TRYi++) {t.join();// 子线程循环// 从环形缓冲区取出数据if (!dequeued)

2025-01-27 21:30:13 806 4

原创 QTimer启动出错: QObject::startTimer: Timers can only be used with threads started with QThread

确保你在一个由QThread启动的线程中使用。如果你需要在非GUI线程中使用定时器,确保这个线程是通过继承QThread并重写run()方法来创建的,并且在启动线程时调用了start()方法。避免在不是由QThread管理的线程中使用 Qt 的信号和槽机制或任何依赖于事件循环的功能。

2025-01-25 22:07:01 756 3

原创 C++常见的错误处理机制

1.异常处理:用于捕获和处理运行时错误,适合处理不可预见的异常情况,而且性能开销较大。2.错误返回码:适用于函数调用链中明确的错误检查,常用于嵌入式系统和性能敏感的代码,性能开销小。3.断言:用于开发阶段捕捉编程错误,发布版本通常禁用。4.日志记录:用于记录和追踪错误,帮助调试和维护。5.条件检查和防御性编程:通过提前检查条件防止错误发生。可以根据具体情况选择最合适的方法来确保程序的健壮性和可靠性。异常处理机制是现代 C++ 推荐的错误处理方式,而断言和错误码在特定情况下也非常有用。

2025-01-15 13:21:36 1014 19

原创 手撕代码: C++实现按位序列化和反序列化

C++实现按位序列化和反序列化

2025-01-15 00:11:50 593 5

原创 C++开发工具必备: Denpendency Walker(依赖关系分析利器)

Dependency Walker是一款功能强大的模块依赖性分析工具,它能够帮助用户快速定位和解决与模块依赖相关的问题。无论是程序开发、系统维护还是安全分析领域,该软件都具有广泛的应用价值。

2025-01-14 22:46:59 1255

原创 一个好用的C++数据库操作库:OTL

OTL库是一个功能强大、高效且易用的C++数据库访问库。它提供了丰富的功能和简洁的接口,使得C++开发者能够方便地进行数据库操作。可以使用OTL访问基本上所有的数据库,在你更换数据库时不用修改任何业务代码。强烈推荐在C++开发中使用。

2025-01-12 17:18:31 1305 7

原创 spdlog一个非常好用的C++日志库(二十): fmt::make_format_args(args...)的使用与原理详解

fmt::make_format_args函数利用了 C++ 的模板和类型推导机制,能够在编译时确定传入参数的类型,并将它们存储在一个统一的格式化参数对象中。具体来说,它们会创建一个 fmt::format_arg_store 对象,该对象内部维护了一个参数数组,每个参数都被封装为 fmt::basic_format_arg 类型。这种封装确保了每个参数在格式化时能够正确匹配相应的格式说明符,提供了类型安全的保证。

2025-01-02 22:33:32 1485 17

原创 C++多线程编程之std::call_once

是 C++11 提供的模版函数,能够帮助我们在多线程环境中安全、简洁地实现“单次调用”的逻辑。通过合理使用,我们可以确保线程安全地执行初始化和其他需要保证只执行一次的操作,从而提高程序的稳定性和效率。正确的使用场景、最佳实践以及性能优化技巧将进一步增强我们在多线程编程中的能力。推荐阅读设计模式之单例模式-优快云博客。

2025-01-02 20:36:33 1071 4

原创 C++代码优化(八):降低编译依赖

加快编译速度:减少依赖关系的传递,避免无关代码的重新编译,减少编译时间。提高可维护性:代码修改时不必修改过多的依赖文件,降低了维护成本。提高灵活性:依赖于声明而不是定义使得系统的扩展性和灵活性更高。修改实现不需要重新编译所有依赖该实现的文件。通过上面这些方法,可以在保持代码清晰和模块化的同时,显著降低编译依赖,使项目的编译过程更高效。C++惯用法之Pimpl_类中隐藏的内存操作 impl-优快云博客C++类之间双向耦合规避的常见方法_c++ 两个类相互持有指针 是什么设计模式-优快云博客。

2024-12-29 16:34:27 743 6

原创 spdlog一个非常好用的C++日志库(十九): fmt API介绍

fmt}库为许多标准C++类型提供格式化程序。有关范围和元组,请参阅fmt/ranges.h,包括标准容器,如std::vector;有关日期和时间格式,请参阅fmt/chrono.h;有关其他标准库类型,请参见fmt/std.h。有两种方法可以格式化用户自定义类型:提供format_as函数或专门formatter 结构模板。如果你想让你的类型像其他具有相同格式说明符的类型一样格式化,请使用format_as。

2024-12-20 23:58:03 1451 22

原创 进程间通信-windows命名管道详解以及完整代码实现

命名管道具有简单易用、跨平台兼容性、双向通信、安全性和可靠性等优点。然而,它也受到单机通信限制、性能瓶颈、同步问题、复杂性增加和依赖性等缺点的制约。命名管道通常只适用于同一台计算机上的进程间通信。虽然有些操作系统(如Windows)可能支持跨网络的命名管道通信,但这种方式通常不如套接字(Sockets)等网络通信机制灵活和高效。因此,在选择IPC机制时,应根据实际需求考虑数据传输的速度、大小、方向以及进程间的亲缘关系等因素。

2024-12-18 20:34:10 1103 18

原创 C++ 的衰退复制(decay-copy)

C++中的衰退复制是一个与类型推导和参数传递相关的复杂过程。在编写C++代码时,需要仔细考虑类型匹配和参数传递方式,以避免不必要的衰退复制和潜在的类型错误。从 C++ 23 开始,标准库中原来使用的类似 decay_copy() 函数那样的表达形式,都被 auto(x) 取代,在某些情况下得到了性能提升。

2024-12-18 16:52:31 1017 7

C++继承多接口,调用虚函数跳转到错误接口的虚函数的奇怪问题demo

C++继承多接口,调用虚函数跳转到错误接口的虚函数的奇怪问题,一个示例的dmeo

2024-04-11

浮点数与十六进制转换工具

 在 C/C++中,使用浮点方式存储实数,用两种数据类型来保存浮点数: foat(单精度)和double(双精度)。float在内存中占4字节,double在内存中占8字节。由于占用空间大,double可描述的精度更高。这两种数据类型在内存中同样以十六进制方式存铺,但写大类型有所不同。         整型类型是将十进制转换成二进制保存在内存中,以十六进制方式显示。浮点类型并不是将一个浮点小数直接转换成二进制数保存,而是将浮点小数转换成的二进制码重新编码,再进行存储。C/C++的浮点数是有符号的。         在C/C++中,将浮点数强制转换为整数时,不会采用数学上四舍五人的方式,而是食弃掉小数部分,不会进位。         浮点数的操作不会用到通用寄存器,而是会使用浮点协处理器的浮点寄存器,专门对浮点数进行运算处理。

2024-01-22

C++设计模式例程,工厂模式例子

C++设计模式例程,工厂模式例子,环境是VS2019打开即可运行 工厂模式也是平时我们编程用的比较多的一种行为设计模式,它提供了一种创建对象的最佳方式。工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。工厂模式属于创建型模式,它在创建对象时提供了一种封装机制,将实际创建对象的代码与使用代码分离。 作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。

2024-01-15

高质量 C++编程指南,编程的好书籍

前言......................................................................................................................................6 第 1 章 文件结构....................................................................................................................8 1.1 版权和版本的声明........................................................................................................8 1.2 头文件的结构 ....................................................................................................

2023-12-26

C++模板函数重载规则详解

模板函数重载匹配规则,他规定着,当我们调用一个具有多个重载的模板函数时,该选择哪个函数作为我们的调用对象。与普通函数的重载类似,但是模板属性会增加一些新的规则。 模板函数重载匹配规则可以引用《c++ primer》中的一段话来总结: 对于一个调用,其候选函数包括所有模板实参推断成功的函数模板实例。 候选的函数模板总是可行的,因为模板实参推断会排除任何不可行的模板。 与往常一样,可行函数(模板与非模板)按类型转换 (如果对此调用需要的话)来排序。当然,可以用于函数模板调用的类型转换是非常有限的。 与往常一样,如果恰有一个函数提供比任何其他函数都更好的匹配,则选择此函数。 但是,如果有多个函数提供同样好的匹配,则: 如果同样好的函数中只有一个是非模板函数,则选择此函数。 如果同样好的函数中没有非模板函数,而有多个函数模板,且其中一个模板比其他模板更特例化,则选择此模板。 否则,此调用有歧义。 看着有点不知所以然,我们一条条来看。这里我给整个过程分为三步: 第一步:模板函数重载匹配会将所有可行的重载列为候选函数。 ...

2023-12-26

sscom 串口调试工具

SSCOM串口调试助手是一款串口通讯软件,在这款软件中主要帮助用户在电脑中对串口进行管理和设置;软件能在任意串口中设置参数,并提供数据的接收、发送等操作,让用户能更加方便轻松的对其管理;软件界面简洁,可以通过十六进制的方式来进行数据转换,操作流程十分的方便,上手难度极低,十分好用。 软件特色 1、SSCOM还支持多种发送方式,如单次发送、循环发送、分段发送等; 2、能够满足不同需求场景的使用要求; 3、SSCOM的独立性较高,支持在没有Python等其他软件的环境下使用,更加方便了用户的使用操作。 软件优点 1、在使用SSCOM时,我们只需将串口设备连接到电脑上; 2、并在SSCOM中选择对应的串口号和通讯协议,设置好波特率等参数,即可开始使用; 3、在数据接收时,我们可以进行数据的实时监控和记录,并且支持数据的导出; 4、在数据发送时,我们可以通过简单的设置实现数据的快速发送和测试。

2023-12-20

NetAssist 网络调试工具

NetAssist,就是网络助手,可以模拟网络之间的通信,互相发送消息 网络调试助手是一款用于Android端网络调试的工具,支持TCP,UDP协议,支持机器自带的串口(可能需要root权限)支持多种网络端口的链接,让网络维修人员或者是个人能够更加简单的对网络进行深度的调试,从而让整个网络更加的符合用户在使用上面的需求,如果你需要的话这款自带中文的调试软件能够满足你的需求。 网络调试助手(NetAssist)软件功能 支持TCP Server,TCP Client, UDP 支持机器自带的串口 支持USB转串口 Esp Touch配网 以对话形式显示通信数据,支持同时建立多个连接 16进制格式数据发送

2023-12-20

基于C++CORBA高级编程

全书共22章,系统地介绍了CORBA的基本体系和概念,IDL语义和映射为C++的规则、POA和对象生命周期,CORBA机理和ORB,动态CORBA特性以及CORBA重要的服务程序。本书的独到之处在于它不仅介绍概念及资源,更重要的是讲述超越API的CORBA内部机制

2023-12-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除