首页
›
后端、数据与云原生工程
›
042-Modern C++工程开发
›
《C++工程开发实战100例》
VIP10
本课程属于:042-Modern C++工程开发
后端、数据与云原生工程 · 共 10 门相关课程,组合学习更完整。
查看所属VIP全部课程 →
← 返回所属目录
咨询 / 购买
《C++工程开发实战100例》
共 100 例
01
现代CMake构建多目标C++工程——使用CMake组织一个包含静态库、动态库和可执行程序的多目标C++工程,配置目标级依赖、包含目录和编译特性,并验证构建产物可被外部工程通过find_package方式引用。
02
基于CMake Presets的多平台构建配置——为同一C++工程编写CMakePresets.json,定义Debug、Release及不同编译器的预设,实现一条命令切换构建类型与工具链,并验证预设继承和缓存变量生效。
03
C++工程头文件依赖治理与前置声明——针对一个头文件互相包含的C++工程,通过前置声明、PIMPL和接口分离消除循环依赖,使用include-what-you-use或编译依赖图验证头文件耦合度下降。
04
RAII封装系统文件描述符——实现一个不可拷贝、可移动的文件描述符RAII包装类,在构造时接管fd、析构时关闭,并编写测试验证异常路径下资源不泄漏。
05
智能指针管理多态对象生命周期——使用unique_ptr和shared_ptr管理一个图形类继承体系,实现工厂函数返回基类指针,并验证多态析构、循环引用避免和weak_ptr缓存失效逻辑。
06
移动语义优化字符串缓冲区传递——实现一个自定义字符串缓冲区类,提供移动构造与移动赋值,在容器插入和函数返回场景中对比拷贝与移动的性能差异,并验证移动后源对象状态合法。
07
完美转发实现通用对象工厂——编写一个可变参数模板工厂函数,使用std
08
基于type_traits的编译期类型检查——实现一组编译期断言和类型萃取工具,用于在模板实例化时检查类型是否可拷贝、可移动或满足特定接口,并验证错误类型触发static_assert。
09
SFINAE约束模板重载——针对一个序列化函数模板,使用enable_if和void_t约束重载版本,使支持serialize成员函数的类型走专用路径,其余类型走通用路径,并验证重载决议正确。
10
C++20 Concepts约束容器算法——使用C++20 concepts为通用容器算法定义元素类型约束,替代SFINAE写法,并验证不满足约束的类型在编译期给出清晰错误信息。
11
变参模板实现类型安全的日志格式化——实现一个类型安全的日志格式化函数模板,支持任意数量参数并避免printf式格式串错误,通过编译期检查或运行时校验保证参数与占位符匹配。
12
编译期计算实现单位换算库——使用constexpr和模板元编程实现长度、时间等单位换算,在编译期完成量纲检查与数值转换,并验证非法单位组合在编译期被拒绝。
13
自定义迭代器适配环形缓冲区——为环形缓冲区实现符合STL规范的随机访问迭代器,使其可用于范围for和标准算法,并验证迭代器在缓冲区回绕时的正确性。
14
STL算法与lambda实现数据管道——使用transform、filter、accumulate等算法与lambda表达式构建一个数据处理管道,对一组记录进行过滤、映射和聚合,并对比手写循环的可读性与性能。
15
无序容器自定义哈希与相等比较——为自定义键类型实现std
16
多线程任务队列与条件变量——实现一个线程安全的任务队列,使用mutex、condition_variable和function包装任务,支持多生产者多消费者,并验证停止信号下无任务丢失或死锁。
17
std
18
线程池的C++实现与任务调度——实现一个固定大小线程池,支持提交可调用对象并获取future结果,验证任务按序完成、异常传播和析构时优雅关闭。
19
std
20
协程实现惰性序列生成器——使用C++20协程实现一个惰性整数序列生成器,支持范围for遍历和提前中断,并验证协程帧在中断后正确销毁。
21
内存池分配器优化小对象分配——实现一个固定大小内存池分配器,满足STL分配器接口并用于list或map,对比默认分配器在大量小对象场景下的分配耗时与内存碎片。
22
自定义allocator接入STL容器——编写一个带统计功能的allocator,记录分配次数、字节数和峰值,接入vector和map,并验证容器操作过程中统计数据的准确性。
23
对象池复用高频创建对象——实现一个对象池管理固定类型对象的获取与归还,支持自动扩容和析构清理,并验证多线程环境下对象不重复分配。
24
内存泄漏检测与RAII修复——在一个存在裸new/delete的C++工程中,使用AddressSanitizer或Valgrind定位泄漏点,并用智能指针或容器重构消除泄漏,验证检测报告清零。
25
未定义行为排查与修复——针对一段包含越界访问、有符号溢出和悬垂引用的C++代码,使用UBSan和静态分析工具定位未定义行为,逐项修复并验证运行时不再报告。
26
数据竞争检测与同步修复——使用ThreadSanitizer检测一个多线程C++程序中的数据竞争,定位共享变量访问冲突,通过加锁或原子操作修复并验证竞争消失。
27
性能剖析定位热点函数——使用perf或gprof对一个计算密集型C++程序进行采样剖析,定位热点函数,结合编译优化和算法改进降低耗时,并对比优化前后数据。
28
缓存友好布局优化矩阵遍历——针对一个矩阵乘法C++实现,通过循环交换、分块和连续内存布局改善缓存局部性,使用性能计数器验证缓存命中率和运行时间提升。
29
编译期优化与内联策略验证——对一个包含小函数调用的C++工程,对比-O0、-O2和LTO下的汇编输出与运行性能,验证内联、常量传播和死代码消除的效果。
30
异常安全保证与强异常安全实现——为一个资源管理类实现基本、强和不抛异常三种异常安全保证,通过注入抛出异常的测试验证对象状态在异常后保持一致。
31
自定义异常体系与错误码桥接——设计一个继承自std
32
std
33
单元测试框架集成与用例编写——将GoogleTest或Catch2集成到CMake工程中,为已有C++模块编写覆盖正常、边界和异常路径的单元测试,并配置CTest一键运行。
34
测试替身与依赖注入解耦——针对一个依赖外部服务的C++类,通过接口抽象和依赖注入引入mock测试替身,验证在不访问真实服务的情况下覆盖核心逻辑。
35
参数化测试覆盖边界条件——使用测试框架的参数化测试功能,为数值计算函数覆盖多组边界输入,包括极值、NaN和溢出场景,并验证结果符合预期。
36
模糊测试发现解析器崩溃——使用libFuzzer或AFL对一个C++输入解析器进行模糊测试,构造种子语料并运行,定位导致崩溃或超时的输入,修复后验证不再复现。
37
基准测试对比算法实现——使用Google Benchmark为同一问题的两种C++算法实现编写基准测试,控制变量并统计显著性,输出对比报告指导实现选择。
38
代码覆盖率统计与缺口分析——使用gcov或llvm-cov统计C++工程的单元测试覆盖率,生成HTML报告,识别未覆盖分支并补充测试用例提升覆盖率。
39
静态分析集成与告警治理——将Clang-Tidy或Cppcheck集成到构建流程,配置检查规则集,对现有C++工程运行并分类处理告警,验证关键规则零告警。
40
编译告警清零与警告即错误——为一个遗留C++工程开启-Wall -Wextra -Werror,逐类修复未使用变量、符号比较和隐式转换告警,验证全量构建无告警。
41
跨平台条件编译与平台抽象层——为一个需要同时支持Windows和Linux的C++工程设计平台抽象层,使用条件编译隔离系统API差异,并验证两平台下核心逻辑测试通过。
42
动态库导出接口与ABI兼容——将一个C++模块编译为动态库,设计稳定的C导出接口或版本化C++接口,验证不同编译器版本下符号可见性和ABI兼容性。
43
插件系统与运行时动态加载——实现一个基于动态库加载的C++插件系统,定义插件接口和注册机制,验证主程序在运行时发现、加载并调用插件。
44
序列化协议集成与版本兼容——使用Protobuf或FlatBuffers为C++工程定义消息格式,实现序列化与反序列化,并验证新增字段后旧版本程序仍能解析。
45
JSON解析与C++对象映射——使用nlohmann/json或RapidJSON实现JSON与C++结构体的双向转换,处理缺失字段、类型错误和嵌套对象,并验证异常输入不崩溃。
46
网络通信TCP客户端服务端实现——使用POSIX socket或Asio实现一个TCP回声服务端与客户端,处理连接建立、数据收发和优雅关闭,并验证多客户端并发连接。
47
HTTP客户端封装与超时重试——基于libcurl或Boost.Beast封装一个C++ HTTP客户端,支持超时、重试和错误分类,并验证对不可达地址和慢响应的处理。
48
线程安全单例与局部静态初始化——实现一个线程安全的单例类,对比 Meyers singleton、双重检查锁和std
49
观察者模式实现事件通知系统——使用C++实现类型安全的观察者模式,支持订阅、取消订阅和事件分发,验证在回调中取消订阅不会导致迭代器失效。
50
状态机实现协议解析——使用状态模式或std
51
命令模式实现可撤销操作——使用命令模式封装一组可撤销的编辑操作,维护撤销/重做栈,并验证连续撤销重做后文档状态与预期一致。
52
工厂模式与注册表解耦对象创建——实现一个基于字符串标识的对象工厂,支持运行时注册创建函数,用于根据配置创建不同派生类,并验证未知标识返回错误。
53
策略模式实现可替换算法——使用策略模式将排序或压缩算法抽象为可替换策略,在运行时注入不同实现,并验证切换策略不影响调用方代码。
54
适配器模式集成第三方C库——为一个C语言第三方库编写C++适配器,封装资源管理和错误处理,提供符合C++习惯的接口,并验证异常安全。
55
PIMPL降低编译依赖——使用PIMPL惯用法重构一个头文件暴露大量私有成员的C++类,减少编译依赖和二进制接口暴露,并验证功能不变且编译时间下降。
56
CRTP实现静态多态——使用CRTP实现一个静态多态的数值计算基类,避免虚函数开销,并对比虚函数版本在循环调用中的性能差异。
57
类型擦除实现通用任务包装——使用std
58
编译期字符串与反射式枚举——实现编译期字符串拼接和枚举到字符串的映射,用于日志和配置解析,并验证未知枚举值返回可读占位符。
59
C++与C互操作接口设计——设计一组extern "C"接口供C代码调用C++实现,处理名称修饰、异常跨越边界和内存所有权,并验证C测试程序正确调用。
60
C++调用Python脚本进行数据分析——在C++工程中嵌入Python解释器或调用Python脚本完成数据清洗,传递数组和结果,并验证异常和GIL处理正确。
61
C++扩展Python模块——使用pybind11或CPython C API将C++函数和类导出为Python模块,处理类型转换和异常映射,并验证Python侧调用结果正确。
62
C++调用REST API并解析响应——使用C++ HTTP库调用一个公开REST API,处理JSON响应、分页和错误状态码,并验证网络异常下的降级逻辑。
63
数据库访问封装与连接池——使用SQLite或MySQL C API封装一个C++数据库访问层,实现预处理语句和连接池,并验证并发查询下连接复用正确。
64
日志库集成与异步日志——集成spdlog或glog到C++工程,配置日志级别、滚动文件和异步模式,并验证高并发写入下日志不丢失且性能可接受。
65
配置解析与热加载——实现一个C++配置管理模块,支持从文件加载键值配置并监听文件变更热加载,验证配置更新后运行中模块行为随之改变。
66
命令行参数解析与子命令——使用CLI11或cxxopts为C++命令行工具实现参数解析,支持子命令、默认值和帮助信息,并验证非法参数给出明确错误。
67
信号处理与优雅退出——在C++服务程序中注册SIGINT和SIGTERM处理函数,设置原子退出标志并通知工作线程,验证收到信号后资源释放且进程正常退出。
68
守护进程化与日志重定向——实现一个C++程序的守护进程化流程,包括fork、setsid、重定向标准输入输出到日志文件,并验证父进程退出后子进程持续运行。
69
定时器与时间轮实现——实现一个基于时间轮的定时器管理模块,支持添加、取消和周期性任务,并验证大量定时器下触发时间准确。
70
内存映射文件实现大文件读取——使用mmap将大文件映射到内存进行只读解析,对比传统read方式的性能,并验证跨平台下映射和解除映射正确。
71
零拷贝文件传输实现——使用sendfile或splice实现C++服务端的零拷贝文件发送,对比普通读写方式的吞吐,并验证大文件传输完整性。
72
无锁队列实现生产者消费者——使用原子操作和内存序实现一个单生产者单消费者无锁队列,验证在高并发下不丢数据且无数据竞争。
73
读写锁优化读多写少场景——使用std
74
条件变量实现线程同步屏障——使用condition_variable实现一个线程屏障,使多个线程在屏障点同步后再继续,并验证所有线程到达前无提前释放。
75
future与promise实现跨线程结果传递——使用std
76
C++20信号量控制并发资源数——使用std
77
C++20屏障同步多阶段计算——使用std
78
协程实现异步IO任务调度——使用C++20协程封装异步IO操作,实现一个简单的任务调度器,验证多个协程交替执行且不阻塞主线程。
79
模块化改造传统头文件工程——将一个小型C++工程的多个头文件逐步改造为C++20模块,处理模块接口与实现分区,并验证编译时间和符号隔离改善。
80
范围库重构容器遍历逻辑——使用C++20 ranges重构对容器进行过滤、转换和拼接的代码,对比传统迭代器写法,并验证惰性求值和组合操作正确。
81
格式化库替代printf风格输出——使用std
82
三路比较运算符简化类型比较——使用C++20 spaceship operator为一个值类型实现全序比较,自动生成所有关系运算符,并验证排序和相等语义正确。
83
指定初始化与聚合类型演进——使用C++20指定初始化器重构配置结构体的初始化代码,处理成员顺序和默认值,并验证与旧式聚合初始化的兼容性。
84
constexpr容器与编译期数据处理——使用constexpr vector或array在编译期完成查找表构建,减少运行时初始化开销,并验证编译期计算结果嵌入二进制。
85
编译期反射模拟实现序列化——使用模板元编程和宏模拟编译期反射,为结构体自动生成序列化代码,避免手写字段遍历,并验证新增字段自动纳入序列化。
86
依赖注入容器实现模块解耦——实现一个轻量级C++依赖注入容器,支持按接口注册和解析实例,管理生命周期,并验证循环依赖被检测并报错。
87
AOP式埋点与性能统计——使用RAII和模板实现函数级耗时统计埋点,自动记录进入退出和耗时,并验证在异常路径下统计仍然完整。
88
编译期断言与静态检查工具链——结合static_assert、concepts和编译期检查函数,为C++库接口建立编译期契约,验证违反契约的调用在编译期失败并给出可读信息。
89
跨语言IDL生成C++绑定——使用FlatBuffers或gRPC的IDL定义接口,生成C++服务端和客户端代码,实现一次定义多语言调用,并验证序列化兼容性。
90
C++工程持续集成流水线配置——为C++工程配置GitHub Actions或GitLab CI流水线,完成多平台构建、单元测试、静态分析和覆盖率上传,并验证失败时流水线正确阻断。
91
制品打包与版本发布——使用CPack或Conan将C++工程打包为可分发制品,包含头文件、库和CMake配置,并验证在干净环境中安装后能被示例工程使用。
92
依赖管理工具集成第三方库——使用vcpkg或Conan管理C++工程第三方依赖,锁定版本并集成到CMake,验证离线构建和依赖冲突解决。
93
编译缓存加速大型工程构建——为大型C++工程配置ccache或sccache,对比全量构建和增量构建时间,并验证缓存命中率与正确性。
94
分布式构建与远程执行——使用distcc或远程执行平台将C++工程编译任务分发到多台机器,配置工具链一致性,并验证构建产物与本地构建一致。
95
二进制体积优化与裁剪——对一个C++可执行文件进行体积分析,使用strip、gc-sections和LTO裁剪未使用代码,并验证功能不变且体积显著下降。
96
启动时间优化与延迟初始化——分析一个C++程序启动阶段的耗时,将非关键全局对象改为延迟初始化,并验证启动时间下降且功能不受影响。
97
内存占用分析与优化——使用massif或heaptrack分析C++程序内存占用,定位峰值来源,通过对象复用和容器收缩降低峰值,并验证优化效果。
98
CPU占用分析与热点消除——使用perf top和火焰图分析C++服务CPU占用,定位忙等待或低效循环,改为事件驱动或批量处理,并验证CPU使用率下降。
99
IO瓶颈分析与异步化改造——对一个同步阻塞IO的C++程序进行strace和iostat分析,定位IO瓶颈,改造为异步或批量IO,并验证吞吐提升。
100
死锁排查与锁顺序修复——构造一个多线程C++程序死锁场景,使用gdb和ThreadSanitizer定位锁顺序问题,通过统一锁顺序或超时机制修复并验证不再死锁。
所属VIP或分类
同VIP:C++内存与资源管理工程
同VIP:C++并发与多线程工程
同VIP:C++性能分析与优化工程