关于 moai-lang-cpp
面向 Claude Code Agent 的现代 C++ 开发技能,涵盖 C++20 和 C++23,以及内存管理、并发、CMake 和测试。内容结合语言特性示例与实用的构建和资源管理模式。
主要功能
- 01C++20 与 C++23 特性
- 02RAII 与智能指针模式
- 03Concepts、ranges 与 modules
- 04CMake 3.28+ 构建指导
- 05并发与测试模式
适用场景
- 01使用 RAII 安全管理资源
- 02使用 CMake 构建 C++ 项目
- 03在代码中应用 ranges 和 concepts
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ modu-ai/ moai-adk --skill moai-lang-cpp安装后在 Claude Code 中输入/moai-lang-cpp确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
modules/advanced-patterns.mdreferences/examples.mdreference.md详细介绍
快速参考(30 秒)
现代 C++(C++23/C++20)开发专家——RAII、智能指针、概念、范围、模块和 CMake。
自动触发:.cpp、.hpp、.h、CMakeLists.txt、vcpkg.json、conanfile.txt、现代 C++ 相关讨论
核心能力:
- C++23 特性:std::expected、std::print、std::generator、显式对象参数推导
- C++20 特性:概念、范围、模块、协程、std::format
- 内存安全:RAII、五法则、智能指针(unique_ptr、shared_ptr、weak_ptr)
- STL:容器、算法、迭代器、std::span、std::string_view
- 构建系统:CMake 3.28+、FetchContent、预设
- 并发:std::thread、std::jthread、std::async、原子操作、std::latch/barrier
- 测试:Google Test、Catch2
- 包管理:vcpkg、Conan 2.0
快速模式
智能指针工厂模式:创建一个带有静态工厂方法的类,该方法返回 std::unique_ptr。添加 memory 头文件,定义一个 Widget 类,其静态 create 方法接受一个 int 类型的 value 参数。create 方法使用 std::make_unique 实例化并返回 Widget。构造函数应为 explicit,接受 value 参数,并将其存储在私有成员变量中。
概念约束模式:定义一个名为 Numeric 的概念,将 std::integral 或 std::floating_point 约束组合起来。创建一个名为 square 的模板函数,要求 T 满足 Numeric 概念;该函数接受一个 value 参数,并返回 value 与自身相乘的结果。
范围管道模式:使用 std::views::iota 创建一个从 1 到 100 的范围,通过管道传入筛选器以选出偶数,然后通过变换将每个值平方,最后取前 10 个结果。
实现指南(5 分钟)
C++23 新特性
使用 std::expected 处理错误:创建一个枚举类 ParseError,包含 InvalidFormat 和 OutOfRange 两个值。定义一个 parse_int 函数,接受 std::string_view,并返回包含 int 或 ParseError 的 std::expected。在函数内部使用 try-catch 块调用 std::stoi。捕获 std::invalid_argument 并返回包含 InvalidFormat 的 std::unexpected,捕获 std::out_of_range 并返回包含 OutOfRange 的 std::unexpected。成功时直接返回解析后的值。使用时,通过 if(result) 检查结果,并使用星号运算符访问值,或处理错误情况。
使用 std::print 实现类型安全输出:包含 print 头文件,并使用 std::println 和花括号占位符进行格式化输出。支持格式说明符,例如冒号后跟 hash x 表示十六进制,或冒号后跟 .2f 表示浮点精度。
显式对象参数推导:定义一个 Builder 类,包含一个 string 类型的 data_ 成员。创建一个模板参数为 Self 的模板方法 append,该方法接受 this Self 和一个 string_view 参数。使用 std::forward 转发 self,并返回 Self 和。这样可以在左值和右值对象上进行链式调用。
C++20 特性
概念与约束:使用 requires 表达式定义一个 Hashable 概念,检查 std::hash 是否能生成 std::size_t。创建带有 requires 子句的模板函数,将 Container 类型约束为 std::ranges::range。对于单个参数的简单约束,使用 std::integral auto 这种简写语法。
模块:创建一个扩展名为 .cppm 的模块接口文件。使用 export module,后跟模块名称。定义一个包含模板函数的 export 命名空间。在使用模块的文件中,使用 import 语句代替 include 指令。在支持模块的编译器中,导入 std 以访问标准库。
Ranges 库:为 Person 等数据类型定义结构体,包含 name 和 age 字段。使用管道运算符串联 views::filter 和 lambda 表达式(用于检查条件),然后使用 views::transform 提取字段。使用基于范围的 for 循环进行遍历。使用 std::ranges::sort 和投影,按成员字段排序。
RAII 和资源管理
五法则:实现一个管理原始指针和大小的 Resource 类。构造函数使用数组形式的 new 分配内存。析构函数调用数组形式的 delete。拷贝构造函数分配新内存并使用 std::copy。拷贝赋值运算符通过创建临时对象并调用 swap,使用 copy-and-swap 惯用法。移动构造函数使用 std::exchange 获取所有权并将源对象置空。移动赋值运算符删除当前数据并使用 std::exchange。swap 成员函数交换指针和大小成员。
智能指针模式:对于唯一所有权,创建通过 std::make_unique 返回 std::unique_ptr 的静态工厂方法。对于存在循环引用的共享所有权,将 std::enable_shared_from_this 用作基类。使用 std::vectorstd::shared_ptr 存储子节点,并使用 std::weak_ptr 存储父节点,以打破引用循环。设置父子关系时使用 weak_from_this。
CMake 现代模式
C++23 的 CMakeLists.txt 结构:以 cmake_minimum_required VERSION 3.28 和 project 声明开头。将 CMAKE_CXX_STANDARD 设为 23,并启用 STANDARD_REQUIRED ON。启用 CMAKE_EXPORT_COMPILE_COMMANDS。使用生成器表达式设置特定编译器的警告标志,并检查 CXX_COMPILER_ID 是否为 GNU、Clang 或 MSVC。使用 FetchContent 声明依赖项,并设置 GIT_REPOSITORY 和 GIT_TAG 参数。调用 FetchContent_MakeAvailable 下载并配置依赖项。使用 add_library 创建库,使用 target_include_directories 设置包含目录,并使用 target_link_libraries 链接库。进行测试时,启用 testing,添加测试可执行文件,链接 GTest::gtest_main,并使用 gtest_discover_tests。
并发
std::jthread 和停止令牌:定义一个接收 std::stop_token 参数的工作函数。循环执行工作并休眠,直到 stop_requested 返回 true。创建 std::jthread 对象并传入工作函数。调用 request_stop 发出终止信号。线程析构函数会自动等待线程结束。
同步原语:使用 std::latch 并调用 count_down 进行一次性同步。使用 std::barrier 和 arrive_and_wait 进行重复同步。使用 std::counting_semaphore 管理资源池,并调用 acquire 和 release。
高级实现(10 分钟以上)
如需全面了解以下内容:
- 模板元编程模式
- 高级并发(线程池、无锁数据结构)
- 内存管理和自定义分配器
- 性能优化(SIMD、缓存友好模式)
- 生产环境模式(依赖注入、工厂)
- 使用 Google Test 和 Catch2 进行扩展测试
请参阅:
- 高级模式 - 完整的高级模式指南
Context7 库映射
- /microsoft/vcpkg - 包管理器
- /conan-io/conan - Conan 包管理器
- /google/googletest - Google Test 测试框架
- /catchorg/Catch2 - Catch2 测试框架
- /fmtlib/fmt - fmt 格式化库
- /nlohmann/json - 现代 C++ 的 JSON 库
- /gabime/spdlog - 高速日志库
搭配使用效果良好
moai-lang-rust- 系统编程对比与互操作moai-domain-backend- 后端服务架构moai-workflow-testing- DDD 和测试策略moai-essentials-debug- 调试和性能分析moai-foundation-quality- TRUST 5 质量原则
故障排除
版本检查:运行 g++ --version,确认 GCC 13+ 支持 C++23;运行 clang++ --version,确认 Clang 17+;运行 cmake --version,确认 CMake 3.28+。
常用编译标志:标准构建使用 -std=c++23 和 -Wall -Wextra -Wpedantic -O2。调试构建添加 -fsanitize=adddess,undefined -g。
vcpkg 集成:从 GitHub 克隆 vcpkg 仓库,运行 bootstrap-vcpkg.sh,然后使用 vcpkg install 安装 fmt、nlohmann-json 和 gtest 等软件包。配置 CMake 时,使用 -DCMAKE_TOOLCHAIN_FILE 指向 vcpkg 的 buildsystems/vcpkg.cmake。
最后更新:2026-01-11 状态:活跃(v1.1.0)