内容
# cpp26-adapter
**将您的LLM编码助手转变为C++26专家。**
一个Claude Code插件(和独立的MCP服务器),偏向于生成符合ISO/IEC 14882:2026最终形式的惯用模式——反射、合约、发送者、`inplace_vector`、`#embed`——即使您的本地clang还没有跟上。
[](https://github.com/parasxos/cpp26-adapter/actions/workflows/ci.yml)
[](https://github.com/parasxos/cpp26-adapter/releases/tag/v1.0.0)
[](https://pypi.org/project/cpp26-ref/)
[-brightgreen)](eval/results-v0.9.1.md)
[](eval/results-v0.9.1.md)
[](https://www.iso.org/standard/83626.html)
[](LICENSE-CODE)
## 快速开始
**完整插件**(Claude Code — 技能 + MCP + 审查器 + 钩子 + 斜杠命令):
```
/plugin marketplace add parasxos/claude-plugins
/plugin install cpp26-adapter@parasxos/claude-plugins
```
**仅MCP服务器**(任何MCP兼容客户端):
```bash
pip install cpp26-ref
```
## 功能
六个具体的惯用模式转换,对于相同的提示,普通的LLM会回答为C++26之前的模式:
| 您询问… | 普通LLM发出 | `cpp26-adapter` 发出 |
|---|---|---|
| 枚举 → 字符串 | X-macros / `magic_enum` | `std::meta::enumerators_of(^^E)` + `template for` |
| 前置条件 | `assert(x > 0)` | `pre(x > 0)` / `contract_assert(...)` |
| 异步管道 | `std::async(...)` | `ex::just \| ex::then \| ex::sync_wait` |
| 固定容量向量 | `boost::static_vector` | `std::inplace_vector<T, N>` |
| 嵌入二进制资产 | `objcopy` / `xxd` / `incbin` | `#embed "asset.bin"` |
| 第N个包元素 | `std::get<N>(std::forward_as_tuple(args...))` | `args...[N]` |
### 钩子 — 请求“枚举到字符串”
普通的LLM会 fallback 到 X-macros。使用 `cpp26-adapter` — 直接从 P2996 反射 + P1306 扩展语句:
```cpp
template <typename E> requires std::is_enum_v<E>
constexpr std::string_view enum_name(E v) {
template for (constexpr auto e :
std::define_static_array(std::meta::enumerators_of(^^E))) {
if (v == [: e :]) return std::meta::identifier_of(e);
}
return "<unknown>";
}
```
没有宏。没有第三方依赖。没有代码生成。更多示例(合约、发送者、`#embed`):[`docs/examples.md`](docs/examples.md)。
## 兼容客户端
| 客户端 | 推荐路径 |
|---|---|
| Claude Code | `/plugin install`(完整插件:技能 + MCP + 审查器 + 钩子) |
| Claude Desktop | `cpp26-ref` MCP服务器通过stdio(以下配置) |
| Cursor | `cpp26-ref` MCP服务器通过stdio |
| VS Code(Cline / Continue) | `cpp26-ref` MCP服务器通过stdio |
| 任何其他MCP客户端 | `cpp26-ref` MCP服务器通过stdio |
## 配置
### Claude Code
安装 `/plugin install cpp26-adapter@parasxos/claude-plugins` 后,所有内容都会自动连接:技能加载到上下文中,MCP按需启动,审查器子代理可以作为 `@cpp26-reviewer` 调用,钩子在每次C++编辑时进行检查,并且 `/cpp26-init` 可用。
### Claude Desktop
添加到 `~/Library/Application Support/Claude/claude_desktop_config.json`(macOS)或 `%APPDATA%\Claude\claude_desktop_config.json`(Windows):
```json
{
"mcpServers": {
"cpp26-ref": {
"command": "cpp26-ref"
}
}
}
```
需要 `pip install cpp26-ref` 在 Python(≥3.11)上,该Python可被Claude Desktop进程访问。
### Cursor / VS Code / 通用MCP客户端
```json
{
"mcpServers": {
"cpp26-ref": { "command": "cpp26-ref" }
}
}
```
### 验证安装
安装 + 重启后,进行三个健全性检查:
1. 询问助手 *"为 `enum class E { A, B }` 编写枚举到字符串"* — 响应应使用 `std::meta` 反射,而不是 X-macros 或 `magic_enum`。
2. (仅完整插件)运行 `@cpp26-reviewer src/foo.cpp` — 应返回一个 YAML 报告,状态为 `status: pass | needs-changes | compiler-lag-only`。
3. (仅完整插件)运行 `/cpp26-init` 在空目录中 — 搭建的 `CMakeLists.txt` 应编译一个 `#include <print>` + `std::print("hi\n")` 的 hello-world。
## MCP工具
`cpp26-ref` 服务器通过MCP公开三个stdio工具,内存中超过216个索引的C++26论文(无SQLite,无嵌入,无构建步骤):
| 工具 | 签名 | 返回 |
|---|---|---|
| `lookup_paper` | `(paper_id: str)` — 例如 `"P2996"` | 完整引用:标题、问题陈述、关键语法、规范示例、预C++26等价物、陷阱、相关论文 |
| `search` | `(query: str, limit: int = 5)` | 标题 + 前言中排名前N的论文,按 `rapidfuzz` 部分比率排名 |
| `compiler_status` | `(paper_id: str)` | 按编译器实现状态:`none`/`partial`/`shipped` × `clang` / `gcc` / `msvc` / `clang-p2996`,带有版本截止日期 |
冷启动 ~352 毫秒。17 个测试在 `pytest mcp-server/tests` 下通过。
## 用例
**生成符合C++26规范的代码。** 请求新代码 — 技能在生成前将模型偏向于C++26规范,因此您会得到 `pre(...)` 而不是 `assert(...)`,`std::execution` 而不是 `std::async`,反射而不是 X-macros,无需重新提示。
**审查现有代码以进行C++26现代化。** 运行 `@cpp26-reviewer src/foo.cpp` — 子代理运行两遍审查:首先是正则表达式反模式,然后是 `clang -std=c++2c -fsyntax-only`,将每个诊断分类为 `compiler-lag`(已采纳的论文,编译器不完整)或 `bug`(真正的代码错误)。您会看到两个轴并排显示。
**初始化新的C++26项目。** 运行 `/cpp26-init` — 搭建 `CMakeLists.txt`(`CXX_STANDARD 26`,`-std=c++2c`,`CMAKE_EXPORT_COMPILE_COMMANDS ON`),`.clangd` 和 `.cpp26-adapter.yaml`。
**获取权威论文引用。** `lookup_paper` MCP工具返回规范的论文文本 — 在您需要引用或引用论文时很有用,或者您希望LLM以实际提案为基础,而不是其(通常过时)的训练数据。
## 不变式
**建议遵循标准,而不是工具链。** 如果 `clang < 22` / `gcc < 16` 没有提供某个功能,插件仍然建议C++26形式。编译器错误被显示为 `compiler-lag` 或 `bug` — 永远不会自动重写为预C++26的变通方法。
建议路径(技能 + MCP)与编译器无关;编译器感知仅存在于审查器的Pass-2语法检查和 `SessionStart` 探针中。完整的架构图:[`docs/architecture.md`](docs/architecture.md)。
## 评估
37/39(95%)启用插件 **ON** vs 14/39(36%)**OFF** 在一个39任务的固定套件上;条形 ≥85%。每个任务的评分 + 方法论:[`eval/results-v0.9.0.md`](eval/results-v0.9.0.md),[`docs/papers.md`](docs/papers.md)。
## 状态
**v1.0.0** — 评估门控在两次连续刷新中保持不变。MCP工具签名、子代理的输出模式和标准优先的不变式对于 `1.x` 行是合同约束的。
## 许可证
按目录双重许可:
- **代码**(除 `corpus/` 外):MIT — [`LICENSE-CODE`](LICENSE-CODE)。
- **知识语料库**(`corpus/`):CC-BY-SA 4.0 — [`LICENSE-CORPUS`](LICENSE-CORPUS)。
## 另见
- [`docs/architecture.md`](docs/architecture.md) — 完整不变式、组件图、演练
- [`docs/examples.md`](docs/examples.md) — 合约、发送者、`#embed` 并排显示
- [`docs/papers.md`](docs/papers.md) — 16 个深层论文 + 评估方法论
- [`docs/FAQ.md`](docs/FAQ.md) — clang/gcc 兼容性、遗留代码、刷新节奏
- 插件仓库:[github.com/parasxos/cpp26-adapter](https://github.com/parasxos/cpp26-adapter) · 市场:[github.com/parasxos/claude-plugins](https://github.com/parasxos/claude-plugins) · PyPI:[pypi.org/project/cpp26-ref](https://pypi.org/project/cpp26-ref/)