- 博客(18)
- 收藏
- 关注
原创 从设计到代码:一步步实现 C++ 设备插件管理框架
本文从设备插件系统设计需求出发,构建一个基于C++与C ABI的插件管理框架。通过定义统一接口、封装函数表、使用模板生成适配代码,实现插件动态加载与多设备管理。以夹爪为例,演示如何编写两个不同厂商的插件,支持创建、张开、销毁操作,并通过插件管理器按ID调用。框架分离了主程序与客户代码职责,确保扩展性与安全性,适用于机器人等嵌入式设备控制场景。
2026-11-06 10:56:40
358
原创 机器人SDK通信架构设计----Half-Sync/Half-Asyn
本文介绍了一套机器人SDK通信架构设计方案,采用分层设计实现服务端与客户端的高效交互。服务端在机器人控制器侧分为异步网络层和同步执行层,通过命令分类处理(立即执行/队列缓冲/UDP直通)解决网络与SDK调用的矛盾;客户端在上位机侧通过发收分离模型和promise机制,将异步网络调用封装为同步接口,使远程调用如同本地函数般简单易用。整个架构兼顾实时性、稳定性和开发便捷性,单Worker线程设计在保证功能的同时降低了复杂度。
2026-07-08 10:15:47
212
原创 设计模式——工厂模式
本文介绍了三种工厂设计模式:1. 简单工厂模式通过一个工厂类集中创建所有对象,但新增类型需要修改工厂代码,违反开闭原则;2. 工厂方法模式为每个产品创建独立工厂,新增产品不影响现有代码,但会导致类增多;3. 抽象工厂模式用于创建产品族(如不同风格的UI组件),一个工厂生产整套风格一致的产品。三者各有特点:简单工厂最简单,工厂方法更灵活,抽象工厂适合产品族场景。
2026-05-28 17:35:19
49
原创 学习C++线程池
线程池是一种多线程处理模式,其核心目的是通过线程复用提高性能、降低资源消耗。主要优势包括:1)减少线程频繁创建/销毁的开销;2)提高响应速度(线程即时可用);3)控制并发线程数量,避免资源耗尽;4)统一管理线程生命周期。典型实现包含任务队列、工作线程集合及同步机制(如互斥锁和条件变量)。工作流程为:初始化时创建固定数量线程,任务提交至队列,空闲线程获取任务执行,任务完成后线程返回池中等待新任务。析构时先设置停止标志,唤醒所有线程安全退出。这种"空间换时间"的设计有效提升了多线程程序的效率
2025-08-25 14:32:41
896
原创 C++可变参数模版(Args... args)、std::bind/std::std::function
C++11引入的可变参数模板(Variadic Templates)支持接收任意数量的模板参数,通过参数包(Parameter Pack)和包展开(Pack Expansion)实现。该特性允许函数模板递归处理参数,并支持完美转发。文章通过示例演示了可变参数模板的基本用法,包括递归终止条件和参数传递机制,同时介绍了std::bind与可变参数的配合使用。可变参数模板极大地增强了C++泛型编程能力,是编写高效、类型安全代码的重要工具。
2025-08-25 13:41:50
934
原创 Qt plugin加载so插件
本文介绍了在Qt中使用QLibrary实现插件热加载的方法。通过QLibrary加载动态库(.so),利用resolve()获取导出函数"export_plugin_class"的地址,强制转换为特定函数指针类型后调用,获取插件接口实例。主程序通过plugin_manager管理插件,plugin_interface定义初始化、获取视图等标准接口。示例包含主项目(test_plugin)和插件项目(test_so),插件需实现导出函数并继承接口类。该方法实现了主程序与插件的解耦,支持运行
2025-08-22 10:48:35
1087
原创 C++的异步操作(std::future/std::async/std::promise)
摘要:C++提供了std::future、std::async和std::promise三种机制实现异步编程。std::future作为结果占位符,通过get()获取异步操作结果;std::async简化异步任务启动,返回future对象;std::promise允许手动设置结果。这些机制能有效减少主线程等待时间,实现结果同步和异常传递。示例代码展示了如何使用它们启动异步计算任务,在主线程继续执行其他操作的同时,需要结果时才等待获取,从而提高程序执行效率。
2025-08-15 10:07:05
1223
原创 C++中的TCP服务端与epoll关键点解读
在TCP中使用epoll,可以简单的实现IO多路复用,建立tcp是一个固话的流程,可以自行参考资料,代码众多,本文只阐述epoll与tcp结合的重点内容。
2025-04-03 10:40:48
868
原创 C++/Qt的自定义操作符
在 C++ 和Qt中,自定义操作符(operator 关键字) 的行为取决于操作符的类型和实现方式。具体来说,操作符可以是对左边的操作数有效,也可以是对右边的操作数有效,甚至可以是全局函数。
2025-03-21 18:25:07
413
原创 C++中某些函数限制只运行一次的方法
在编写代码的过程中,有些执行函数只要求被执行一次即可,但是又需要暴露出接口给用户,为了避免函数中的代码被多次执行,找到了一些方法来解决该问题。
2025-03-12 17:41:37
916
原创 C++函数返回值是引用&
在 C++ 中,函数可以返回引用(&),这是一种非常强大的特性。返回引用的函数可以直接操作调用者提供的对象,避免了不必要的拷贝,同时也可以用于实现链式调用等高级功能。以下是关于 C++ 引用作为返回值的详细说明。并且可以通过调用函数名称进行赋值,在 C++ 中,是因为函数返回的是,而引用本质上是一个别名,它直接绑定到某个变量或对象上。因此,通过引用可以直接修改原对象的值。
2025-03-10 18:13:11
735
原创 qt使用printf输出
在qt中,一般都是使用qDebug、std::cout<<输出,printf是C语言的输出函数,当然也可以在qt中进行使用。
2025-02-25 16:01:23
1061
原创 Windows-VS使用xml-rpc-c
XML-RPC 是一种基于 XML 的远程过程调用(Remote Procedure Call, RPC)协议,它允许客户端通过网络调用服务器上的方法。XML-RPC 使用 HTTP 作为传输协议,XML 作为数据格式,具有简单、跨平台和语言无关的特点。。这是 XML-RPC 的一个重要优势,使其成为在不同操作系统和编程语言之间进行通信的流行选择。
2025-02-25 10:40:57
839
原创 C++学习之template
面向对象编程与泛型编程都能够做到不确定类型的情况下执行程序,也就是不需要写死它的类型,面向对象中的多态就是在运行时确定要执行的内容,而在泛型编程中,在编译时就能确定,C++ 中的是泛型编程的核心工具。
2025-02-22 14:57:19
357
原创 关于如何在occ的显示视图中获取AIS_PointCloud中鼠标点击的点的索引
occ获取选中点云的索引,AIS_PointCloud、AIS_PointCloudOwner
2024-12-31 09:47:49
550
1
原创 VS2017将控制台程序(CONSOLE)修改为输出窗口(WINDOWS)
最后,也有人说同时在C/C++--->预处理器---预处理器定义中写入_CONSOLE(控制台程序)或_WINDOWS(输出窗口),但是最后也没做这方面的修改,也没什么问题。2.链接器--->高级--->入口点。3.将程序改为输出窗口后,std::cout<<"xxx"<<std::endl;1.属性--->配置属性--->链接器--->系统--->子系统,将子系统中的控制台,更换为窗口。:这也是网上很多的修改方式,但是到此并没有结束。如果将程序子系统(步骤1)修改回控制台输出,步骤2不影响函数执行,s。
2023-11-23 17:43:49
3945
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅