MaaEnd cpp-algo C++ 编码风格与工程规范指南。参考 MaaFramework 的优秀实践,规范命名、头文件、公共工具、错误处理、日志、CMake 等方面。在编写、修改或审查 agent/cpp-algo/ 下的 C++ 代码时使用。
本指南以 MaaFramework 源码为标杆,针对 cpp-algo 中已知的工程缺陷制定规范。
cpp-algo 当前最严重的问题是 命名风格不统一,同一个项目中混用了多种约定。
| 元素 | 风格 | 示例 |
|---|---|---|
| 类 / 结构体 / 枚举 | PascalCase | MapLocator, MatchFeature |
| 成员函数 | camelCase | initialize(), resetTrackingState() |
| 自由函数 | PascalCase(对外)/ snake_case(内部工具) | CreateInputBackend() |
| 成员变量 | snake*case + 尾下划线 * | locator_, current_zone_id_ |
| 局部变量 | snake_case | search_rect, fine_result |
| 常量(constexpr) |
k 前缀 + PascalCase |
kDefaultMinimapRoi, kMaxLostFrames |
| 宏 | ALL_CAPS | MAA_TRUE, LOG_ARGS |
| 命名空间 | lowercase | maplocator, mapnavigator |
| 模板参数 | 后缀 _t 或 PascalCase | Item_t, OutT |
| 枚举值 | PascalCase | TrackingLost, ScreenBlocked |
MapPosition 中 zoneId、sliceIndex 等用了 camelCase 成员,应改为 zone_id_、slice_index_TrackingConfig 中 maxNormalSpeed、screenBlockedThreshold 同理MatchStrategy 中 _isBase(前导下划线)应改为 is_base_MinimapROIOriginX、MaxLostTrackingCount、MinMatchScore 缺少 k 前缀统一使用 #pragma once(已做到)。
按以下分组排列,组间空行分隔:
.cpp 对应的 .h<algorithm>, <string> ...<opencv2/...>, <meojson/json.hpp>, <onnxruntime/...><MaaFramework/...>, <MaaUtils/...>"MapTypes.h", "../utils.h"必须 通过 <MaaUtils/NoWarningCV.hpp> 引入 OpenCV,禁止直接 <opencv2/opencv.hpp>。这是 MaaFramework 的统一做法,用于抑制编译器警告。
当前违规文件:MatchStrategy.h、MotionTracker.h、YoloPredictor.h 直接引入了 <opencv2/opencv.hpp>。
对外部依赖(MaaFramework、第三方库)统一使用尖括号 <>,对本项目内部头文件使用双引号 ""。
cpp-algo 中存在多处 重复实现,必须提取到公共头文件。
ScopedImageBuffer — 当前在 MapLocateAction.cpp、position_provider.cpp、adb_input_backend.cpp 三处重复定义,应提取到公共头文件(如 source/common/scoped_buffer.h):
class ScopedImageBuffer
{