image
VincentWei

天地间,浩然正气长存,为天地立心,为生民立命,为往圣继绝学,为万世开太平!

免责声明:网站内容仅供个人学习记录,禁做商业用途,转载请注明出处。

版权所有 © 2017-2020 NEUSNCP个人学习笔记 辽ICP备17017855号-2

Python to C++11 代码转换 AI Agent Skill 设计文档

VincentWei    2026年3月28日 16:19:59

Python to C++11 代码转换 AI Agent Skill 设计文档

版本: 1.0.0 创建日期: 2025年3月28日 作者: weijl


目录

  1. 概述

  2. 系统架构

  3. 核心模块设计

  4. 类型映射系统

  5. 语法转换规则

  6. 代码验证框架

  7. 测试框架设计

  8. API接口设计

  9. 使用指南

  10. 扩展与定制

  11. 已知限制与未来规划


1. 概述

1.1 项目背景

Python和C++是两种广泛使用的编程语言,各有其优势:

  • Python: 简洁易读、开发效率高、丰富的库生态

  • C++11: 高性能、类型安全、底层控制能力强

在实际开发中,经常需要将Python代码转换为C++代码以获得更好的性能。手动转换耗时且容易出错,因此需要自动化工具来辅助这一过程。

1.2 设计目标

本Skill旨在提供完整、完备、详细的Python到C++11代码转换功能:

目标 描述
完整性 转换后的C++代码不能遗漏任何Python逻辑
准确性 转换后的代码必须符合C++11语法标准
一致性 保持与原Python代码的逻辑完全一致
可验证 提供验证机制确保转换正确性
可扩展 支持自定义转换规则和扩展

1.3 适用场景

  • Python算法移植到C++以提升性能

  • Python原型代码转换为生产级C++实现

  • 跨语言代码迁移项目

  • 学习C++语法的Python开发者

  • 需要在C++项目中复用Python逻辑


2. 系统架构

2.1 整体架构图

┌─────────────────────────────────────────────────────────────────┐
│                    Python to C++11 Skill                        │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐        │
│  │   输入层    │───▶│   转换层    │───▶│   输出层    │        │
│  │             │    │             │    │             │        │
│  │ - Python代码│    │ - 词法分析  │    │ - C++代码   │        │
│  │ - 配置选项  │    │ - 语法解析  │    │ - 头文件    │        │
│  │ - CLI参数   │    │ - 代码生成  │    │ - 警告信息  │        │
│  └─────────────┘    └─────────────┘    └─────────────┘        │
│         │                  │                  │                │
│         ▼                  ▼                  ▼                │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐        │
│  │  类型映射   │    │  LLM增强    │    │  验证框架   │        │
│  │   模块      │    │   模块      │    │   模块      │        │
│  └─────────────┘    └─────────────┘    └─────────────┘        │
│                                                                 │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │                    测试框架                              │   │
│  │  - 单元测试  - 集成测试  - 等价性测试  - 性能测试        │   │
│  └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

2.2 文件结构

python-to-cpp11/
│
├── SKILL.md                    # Skill核心说明文档
│   ├── 元数据 (name, description)
│   ├── 类型映射表
│   ├── 语法转换规则
│   ├── 使用方法
│   └── 最佳实践
│
├── scripts/                    # 核心脚本目录
│   │
│   ├── converter.py            # 核心转换器
│   │   ├── ConversionOptions   # 转换选项配置类
│   │   ├── ConversionResult    # 转换结果数据类
│   │   ├── PythonToCppConverter # 主转换器类
│   │   └── convert_file()      # 文件转换函数
│   │
│   ├── convert_with_llm.py     # 增强版转换器
│   │   ├── EnhancedPythonToCppConverter
│   │   └── 更完善的语法处理
│   │
│   ├── llm_converter.py        # LLM API集成
│   │   ├── LLMConverter        # LLM增强转换器
│   │   └── enhance_with_llm()  # LLM增强函数
│   │
│   ├── validator.py            # 代码验证器
│   │   ├── CppValidator        # C++代码验证类
│   │   ├── ValidationResult    # 验证结果数据类
│   │   └── validate_cpp_code() # 验证函数
│   │
│   └── test_framework.py       # 测试框架
│       ├── ConversionTestFramework
│       ├── TestResult          # 测试结果
│       ├── TestSuiteResult     # 测试套件结果
│       └── STANDARD_TEST_CASES # 标准测试用例
│
├── references/                 # 参考文档
│   └── examples.md             # 详细转换示例
│       ├── 基础类型转换
│       ├── 函数转换
│       ├── 类转换
│       ├── 控制流转换
│       ├── 数据结构转换
│       ├── 算法转换
│       └── 完整程序转换
│
├── examples/                   # 示例代码
│   └── demo_examples.py        # 演示示例
│       ├── 10个完整示例
│       └── 覆盖所有主要功能
│
├── evals/                      # 测试评估
│   └── evals.json              # 测试用例配置
│       └── 10个评估用例
│
└── demo.py                     # 完整演示脚本

2.3 数据流图

┌──────────────┐
│ Python代码   │
│   输入       │
└──────┬───────┘
       │
       ▼
┌──────────────┐     ┌──────────────┐
│  词法分析    │────▶│  类型推断    │
│  按行解析    │     │  确定类型    │
└──────┬───────┘     └──────┬───────┘
       │                    │
       ▼                    ▼
┌──────────────┐     ┌──────────────┐
│  导入处理    │     │  头文件映射  │
│  import分析  │     │  确定includes│
└──────┬───────┘     └──────┬───────┘
       │                    │
       └────────┬───────────┘
                │
                ▼
┌──────────────────────────┐
│      结构识别            │
│  - 类定义                │
│  - 函数定义              │
│  - 全局变量              │
│  - 控制流                │
└───────────┬──────────────┘
            │
            ▼
┌──────────────────────────┐
│      代码生成            │
│  - 类型转换              │
│  - 语法映射              │
│  - 表达式转换            │
└───────────┬──────────────┘
            │
            ▼
┌──────────────────────────┐
│      后处理              │
│  - 添加头文件            │
│  - 格式化代码            │
│  - 添加注释              │
└───────────┬──────────────┘
            │
            ▼
┌──────────────┐
│ C++11代码    │
│   输出       │
└──────────────┘

3. 核心模块设计

3.1 转换器模块 (converter.py)

3.1.1 类设计

@dataclass
class ConversionOptions:
    """转换选项配置"""
    use_smart_pointers: bool = True    # 使用智能指针
    use_optional: bool = True          # 使用std::optional
    use_auto: bool = True              # 使用auto类型推导
    add_comments: bool = True          # 添加注释
    preserve_docstrings: bool = True   # 保留文档字符串
    use_namespaces: bool = True        # 使用命名空间
    include_headers: bool = True       # 包含头文件
    use_constexpr: bool = True         # 使用constexpr
    use_move_semantics: bool = True    # 使用移动语义
    verbose: bool = False              # 详细输出
​
​
@dataclass
class ConversionResult:
    """转换结果"""
    cpp_code: str           # 生成的C++代码
    headers: List[str]      # 需要的头文件
    warnings: List[str]     # 警告信息
    errors: List[str]       # 错误信息
    notes: List[str]        # 备注信息
​
​
class PythonToCppConverter:
    """主转换器类"""
    
    def __init__(self, options: ConversionOptions):
        self.options = options
        self.headers: set          # 收集的头文件
        self.warnings: List[str]   # 警告列表
        self.errors: List[str]     # 错误列表
        self.notes: List[str]      # 备注列表
    
    def convert(self, python_code: str) -> ConversionResult:
        """主转换方法"""
        # 1. 预扫描确定头文件
        self._scan_for_headers(python_code)
        
        # 2. 处理导入语句
        self._convert_imports(lines)
        
        # 3. 转换代码块
        self._convert_code_block(lines)
        
        # 4. 组装最终代码
        self._assemble_code()
        
        return ConversionResult(...)
    
    # 内部方法
    def _convert_class(self, lines, start) -> Tuple[str, int]
    def _convert_function(self, lines, start) -> Tuple[str, int]
    def _convert_method(self, lines, start) -> Tuple[str, int]
    def _convert_statement(self, stmt) -> str
    def _convert_expression(self, expr) -> str
    def _convert_type(self, py_type) -> str

3.1.2 转换流程

def convert(self, python_code: str) -> ConversionResult:
    """
    完整转换流程:
    
    1. 初始化
       - 重置headers、warnings、errors、notes
       - 添加基础头文件
       
    2. 预扫描
       - 扫描代码确定需要的头文件
       - 识别使用的Python特性
       
    3. 解析代码
       - 按行分割代码
       - 识别代码结构(类、函数、全局变量)
       
    4. 转换各部分
       - 转换import语句
       - 转换类定义
       - 转换函数定义
       - 转换全局代码
       
    5. 生成输出
       - 组装头文件部分
       - 组装代码部分
       - 添加main函数包装
       
    6. 返回结果
    """

3.2 增强转换器 (convert_with_llm.py)

3.2.1 增强功能

class EnhancedPythonToCppConverter:
    """增强版转换器,提供更完善的语法处理"""
    
    def __init__(self, options):
        self.options = options
        self._essential_headers = {
            '<iostream>', '<string>', '<cstdint>', '<vector>'
        }
    
    def convert(self, python_code: str) -> ConversionResult:
        """
        增强的转换流程:
        
        1. 代码预处理
           - 提取所有代码部分(类、函数、全局代码)
           
        2. 类转换增强
           - 正确处理成员变量声明
           - 正确处理构造函数初始化列表
           - 正确处理方法中的self引用
           
        3. 函数转换增强
           - 自动包装全局代码到main函数
           - 正确处理返回类型推断
           
        4. 代码生成增强
           - 更好的代码格式化
           - 更完整的注释保留
        """
    
    def _convert_class(self, lines, start):
        """
        类转换详细流程:
        
        1. 解析类签名
           - 提取类名
           - 提取基类列表
           
        2. 收集类体
           - 确定缩进层级
           - 收集所有方法
           
        3. 处理__init__方法
           - 提取参数列表
           - 声明私有成员变量
           - 生成构造函数初始化列表
           
        4. 处理其他方法
           - 移除self参数
           - 转换方法体
           
        5. 组装类代码
           - private成员区
           - public方法区
        """

3.3 LLM增强模块 (llm_converter.py)

3.3.1 LLM集成设计

class LLMConverter:
    """LLM增强转换器"""
    
    def __init__(self, api_key: str = None):
        self.api_key = api_key or os.environ.get('ZHIPUAI_API_KEY')
        self.base_url = 'https://open.bigmodel.cn/api/paas/v4'
    
    async def convert_with_llm(
        self, 
        python_code: str, 
        options: ConversionOptions
    ) -> LLMConversionResult:
        """
        LLM增强转换流程:
        
        1. 基础转换
           - 使用规则转换器生成初始C++代码
           
        2. LLM增强
           - 构建增强prompt
           - 调用GLM-4 API
           - 提取增强后的代码
           
        3. 结果整合
           - 合并基础转换和LLM增强的结果
           - 返回最终代码
        """
    
    def _build_enhancement_prompt(
        self, 
        python_code: str, 
        initial_cpp: str
    ) -> str:
        """
        构建LLM增强prompt:
        
        包含:
        - 原始Python代码
        - 初始C++转换结果
        - 转换要求
        - 输出格式说明
        """

4. 类型映射系统

4.1 基本类型映射

TYPE_MAPPING = {
    # Python类型      C++类型
    'int':           'int64_t',          # 整数
    'float':         'double',           # 浮点数
    'str':           'std::string',      # 字符串
    'bool':          'bool',             # 布尔值
    'None':          'nullptr',          # 空值
    'list':          'std::vector',      # 列表
    'dict':          'std::unordered_map', # 字典
    'set':           'std::unordered_set', # 集合
    'tuple':         'std::tuple',       # 元组
    'bytes':         'std::vector<uint8_t>', # 字节
    'complex':       'std::complex<double>', # 复数
    'object':        'auto',             # 任意对象
    'Any':           'auto',             # 任意类型
}

4.2 类型注解映射

def _convert_type(self, py_type: str) -> str:
    """
    类型注解转换规则:
    
    1. Optional[T] -> std::optional<T>
       Python: Optional[int]
       C++:    std::optional<int64_t>
    
    2. List[T] -> std::vector<T>
       Python: List[int]
       C++:    std::vector<int64_t>
    
    3. Dict[K, V] -> std::unordered_map<K, V>
       Python: Dict[str, int]
       C++:    std::unordered_map<std::string, int64_t>
    
    4. Tuple[T1, T2, ...] -> std::tuple<T1, T2, ...>
       Python: Tuple[int, str]
       C++:    std::tuple<int64_t, std::string>
    
    5. Union[T1, T2] -> auto (或std::variant)
       Python: Union[int, str]
       C++:    auto (简化处理)
    """

4.3 类型推断

def _infer_type(self, value: str) -> str:
    """
    值类型推断规则:
    
    1. 整数字面量 -> int64_t
       value = "42" -> int64_t
    
    2. 浮点字面量 -> double
       value = "3.14" -> double
    
    3. 布尔字面量 -> bool
       value = "True" -> bool
    
    4. 字符串字面量 -> std::string
       value = '"hello"' -> std::string
    
    5. 列表字面量 -> std::vector
       value = "[1, 2, 3]" -> std::vector
    
    6. 字典字面量 -> std::unordered_map
       value = '{"a": 1}' -> std::unordered_map
    
    7. None -> std::nullptr_t
       value = "None" -> std::nullptr_t
    
    8. 无法推断 -> auto
       value = "some_var" -> auto
    """

4.4 头文件映射

HEADER_PATTERNS = {
    # 代码模式              需要的头文件
    'std::string':        '<string>',
    'std::vector':        '<vector>',
    'std::map':           '<map>',
    'std::unordered_map': '<unordered_map>',
    'std::set':           '<set>',
    'std::unordered_set': '<unordered_set>',
    'std::cout':          '<iostream>',
    'std::unique_ptr':    '<memory>',
    'std::shared_ptr':    '<memory>',
    'std::optional':      '<optional>',
    'std::function':      '<functional>',
    'std::thread':        '<thread>',
    'std::mutex':         '<mutex>',
    'std::regex':         '<regex>',
    'std::chrono':        '<chrono>',
    'std::sort':          '<algorithm>',
    'std::tuple':         '<tuple>',
    'std::sqrt':          '<cmath>',
    'int64_t':            '<cstdint>',
    'assert':             '<cassert>',
}

5. 语法转换规则

5.1 函数定义转换

Python:
def function_name(param1: type1, param2: type2 = default) -> return_type:
    """Documentation string"""
    # function body
    return result
​
C++11:
/**
 * Documentation string
 */
return_type function_name(type1 param1, type2 param2 = default) {
    // function body
    return result;
}

转换要点:

  1. 参数类型从注解中提取

  2. 默认值直接保留

  3. 返回类型从注解或函数体推断

  4. 文档字符串转换为注释

5.2 类定义转换

Python:
class ClassName(BaseClass):
    """Class documentation"""
    class_var = value
    
    def __init__(self, param):
        self.instance_var = param
    
    def method(self):
        return self.instance_var
​
C++11:
/**
 * Class documentation
 */
class ClassName : public BaseClass {
private:
    static const auto class_var = value;
    decltype(param) instance_var;
    
public:
    ClassName(decltype(param) param) : instance_var(param) {}
    
    auto method() -> decltype(instance_var) {
        return instance_var;
    }
};

转换要点:

  1. 基类转换为public继承

  2. 类变量转换为静态常量

  3. 实例变量转换为私有成员

  4. __init__转换为构造函数

  5. self.转换为this->

5.3 控制流转换

if-elif-else

Python:
if condition1:
    action1
elif condition2:
    action2
else:
    action3
​
C++11:
if (condition1) {
    action1;
} else if (condition2) {
    action2;
} else {
    action3;
}

for循环

Python:
for item in iterable:
    process(item)
​
for i in range(10):
    print(i)
​
for idx, item in enumerate(items):
    print(idx, item)
​
C++11:
for (const auto& item : iterable) {
    process(item);
}
​
for (int64_t i = 0; i < 10; ++i) {
    std::cout << i << std::endl;
}
​
for (size_t idx = 0; idx < items.size(); ++idx) {
    std::cout << idx << " " << items[idx] << std::endl;
}

while循环

Python:
while condition:
    action
​
C++11:
while (condition) {
    action;
}

5.4 数据结构转换

列表

Python:
numbers = [1, 2, 3, 4, 5]
doubled = [x * 2 for x in numbers]
filtered = [x for x in numbers if x > 2]
​
C++11:
std::vector<int64_t> numbers = {1, 2, 3, 4, 5};
std::vector<int64_t> doubled;
for (const auto& x : numbers) {
    doubled.push_back(x * 2);
}
std::vector<int64_t> filtered;
for (const auto& x : numbers) {
    if (x > 2) {
        filtered.push_back(x);
    }
}

字典

Python:
person = {
    "name": "Alice",
    "age": 30
}
for key, value in person.items():
    print(key, value)
​
C++11:
std::unordered_map<std::string, auto> person = {
    {"name", "Alice"},
    {"age", "30"}
};
for (const auto& pair : person) {
    std::cout << pair.first << " " << pair.second << std::endl;
}

5.5 表达式转换

def _convert_expression(self, expr: str) -> str:
    """
    表达式转换规则:
    
    1. 布尔字面量
       True -> true
       False -> false
       None -> nullptr
    
    2. 逻辑运算符
       not x -> !x
       x and y -> x && y
       x or y -> x || y
       x is y -> x == y
    
    3. 内置函数
       len(x) -> x.size()
       print(x) -> std::cout << x
    
    4. 成员访问
       self.x -> this->x
    
    5. 字符串格式化
       f"Value: {x}" -> "Value: " + std::to_string(x)
    """

6. 代码验证框架

6.1 验证器设计

@dataclass
class ValidationResult:
    """验证结果"""
    is_valid: bool              # 是否有效
    syntax_errors: List[str]    # 语法错误
    compilation_errors: List[str] # 编译错误
    warnings: List[str]         # 警告
    suggestions: List[str]      # 建议
    cxx11_compliance: bool      # C++11合规
    test_passed: bool           # 测试通过
    test_output: str            # 测试输出
​
​
class CppValidator:
    """C++代码验证器"""
    
    def validate(self, cpp_code: str, run_tests: bool) -> ValidationResult:
        """
        验证流程:
        
        1. 语法检查
           - 大括号匹配
           - 括号匹配
           - 分号检查
           
        2. 警告生成
           - 裸指针警告
           - 内存泄漏警告
           - 魔法数字警告
           
        3. 建议生成
           - 使用constexpr建议
           - 使用auto建议
           - 使用const引用建议
           
        4. 编译测试 (可选)
           - 调用g++编译
           - 捕获编译错误
           
        5. 运行测试 (可选)
           - 执行编译后程序
           - 捕获输出
        """

6.2 语法检查规则

def _check_syntax(self, cpp_code: str) -> List[str]:
    """
    语法检查规则:
    
    1. 括号平衡检查
       - 统计 { } 数量
       - 统计 [ ] 数量
       - 统计 ( ) 数量
       - 检测不匹配
       
    2. 分号检查
       - 声明语句需要分号
       - 表达式语句需要分号
       
    3. 关键字检查
       - class后需要 {
       - if后需要 (
       
    4. 格式检查
       - 不应有Python关键字残留
    """

6.3 编译验证

def _try_compile(self, cpp_code: str) -> Tuple[List[str], bool, str]:
    """
    编译验证流程:
    
    1. 创建临时文件
       - 写入C++代码
       
    2. 调用编译器
       - g++ -std=c++11 -Wall -Wextra
       
    3. 捕获结果
       - 编译成功: 无错误
       - 编译失败: 返回错误信息
       
    4. 清理临时文件
    """

7. 测试框架设计

7.1 测试框架结构

@dataclass
class TestResult:
    """单个测试结果"""
    test_name: str              # 测试名称
    passed: bool                # 是否通过
    python_code: str            # Python代码
    cpp_code: str               # C++代码
    errors: List[str]           # 错误列表
    warnings: List[str]         # 警告列表
    execution_time_ms: float    # 执行时间
    details: Dict[str, Any]     # 详细信息
​
​
@dataclass
class TestSuiteResult:
    """测试套件结果"""
    total_tests: int            # 总测试数
    passed: int                 # 通过数
    failed: int                 # 失败数
    skipped: int                # 跳过数
    results: List[TestResult]   # 所有结果
    total_time_ms: float        # 总时间
​
​
class ConversionTestFramework:
    """转换测试框架"""
    
    def run_test_suite(self, test_cases: List[Dict]) -> TestSuiteResult:
        """运行测试套件"""
        
    def run_single_test(self, name: str, python_code: str) -> TestResult:
        """运行单个测试"""
        
    def test_equivalence(self, python_code: str, cpp_code: str) -> Tuple[bool, str, str]:
        """测试Python和C++输出等价性"""

7.2 标准测试用例

STANDARD_TEST_CASES = [
    {
        'name': 'test_basic_types',
        'python_code': '...',
        'expected_output': '...'
    },
    {
        'name': 'test_function_definition',
        'python_code': '...',
    },
    {
        'name': 'test_class_definition',
        'python_code': '...',
    },
    {
        'name': 'test_if_else',
        'python_code': '...',
    },
    {
        'name': 'test_loops',
        'python_code': '...',
    },
    {
        'name': 'test_lists',
        'python_code': '...',
    },
    {
        'name': 'test_dictionaries',
        'python_code': '...',
    },
    {
        'name': 'test_exceptions',
        'python_code': '...',
    },
    {
        'name': 'test_lambda',
        'python_code': '...',
    },
    {
        'name': 'test_inheritance',
        'python_code': '...',
    },
    {
        'name': 'test_recursion',
        'python_code': '...',
    },
    {
        'name': 'test_sorting',
        'python_code': '...',
    },
    {
        'name': 'test_stack',
        'python_code': '...',
    },
    {
        'name': 'test_math',
        'python_code': '...',
    },
    {
        'name': 'test_strings',
        'python_code': '...',
    },
]

7.3 测试输出格式

Test Suite Results
==================
Total: 15
Passed: 15
Failed: 0
Time: 2.43ms
​
✓ test_basic_types (0.44ms)
✓ test_function_definition (0.18ms)
✓ test_class_definition (0.43ms)
✓ test_if_else (0.16ms)
✓ test_loops (0.15ms)
✓ test_lists (0.11ms)
✓ test_dictionaries (0.07ms)
✓ test_exceptions (0.10ms)
✓ test_lambda (0.08ms)
✓ test_inheritance (0.13ms)
✓ test_recursion (0.08ms)
✓ test_sorting (0.19ms)
✓ test_stack (0.12ms)
✓ test_math (0.10ms)
✓ test_strings (0.10ms)

8. API接口设计

8.1 Python API

# 基础转换
from scripts.converter import PythonToCppConverter, ConversionOptions
​
options = ConversionOptions(
    use_smart_pointers=True,
    use_optional=True,
    add_comments=True
)
​
converter = PythonToCppConverter(options)
result = converter.convert(python_code)
​
print(result.cpp_code)
print(result.headers)
print(result.warnings)

8.2 CLI接口

# 基础用法
python scripts/converter.py --input input.py --output output.cpp
​
# 从stdin读取
cat script.py | python scripts/converter.py --stdin
​
# 详细输出
python scripts/converter.py --input input.py --output output.cpp --verbose
​
# 使用LLM增强
python scripts/llm_converter.py --input input.py --output output.cpp --llm
​
# 验证代码
python scripts/validator.py --input output.cpp --run-tests
​
# 运行测试
python scripts/test_framework.py --format json

8.3 配置选项

选项 类型 默认值 描述
use_smart_pointers bool True 使用智能指针管理内存
use_optional bool True 使用std::optional处理可空值
use_auto bool True 使用auto类型推导
add_comments bool True 添加转换说明注释
preserve_docstrings bool True 保留文档字符串
use_namespaces bool True 使用命名空间
include_headers bool True 自动添加头文件
use_constexpr bool True 使用constexpr优化
use_move_semantics bool True 使用移动语义
verbose bool False 详细输出

9. 使用指南

9.1 快速开始

# 1. 进入skill目录
cd skills/python-to-cpp11
​
# 2. 运行演示
python demo.py
​
# 3. 转换文件
python scripts/convert_with_llm.py --input my_code.py --output my_code.cpp
​
# 4. 运行测试
python scripts/test_framework.py

9.2 示例:函数转换

输入 (Python):

def fibonacci(n: int) -> int:
    """Calculate the nth Fibonacci number."""
    if n <= 1:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)
​
result = fibonacci(10)
print(f"Fibonacci(10) = {result}")

输出 (C++11):

// Generated by Python to C++11 Converter
#include <iostream>
#include <cstdint>
​
using namespace std;
​
/**
 * Calculate the nth Fibonacci number.
 */
int64_t fibonacci(int64_t n) {
    if (n <= 1) {
        return n;
    }
    return fibonacci(n - 1) + fibonacci(n - 2);
}
​
int main() {
    auto result = fibonacci(10);
    cout << "Fibonacci(10) = " << std::to_string(result) << endl;
    return 0;
}

9.3 示例:类转换

输入 (Python):

class Rectangle:
    """A rectangle shape."""
    
    def __init__(self, width: float, height: float):
        self.width = width
        self.height = height
    
    def area(self) -> float:
        return self.width * self.height
    
    def perimeter(self) -> float:
        return 2 * (self.width + self.height)
​
rect = Rectangle(5.0, 3.0)
print(f"Area: {rect.area()}")
print(f"Perimeter: {rect.perimeter()}")

输出 (C++11):

// Generated by Python to C++11 Converter
#include <iostream>
​
using namespace std;
​
class Rectangle {
private:
    double width;
    double height;
    
public:
    Rectangle(double width, double height) 
        : width(width), height(height) {}
    
    double area() {
        return width * height;
    }
    
    double perimeter() {
        return 2 * (width + height);
    }
};
​
int main() {
    Rectangle rect(5.0, 3.0);
    cout << "Area: " << rect.area() << endl;
    cout << "Perimeter: " << rect.perimeter() << endl;
    return 0;
}

10. 扩展与定制

10.1 添加自定义类型映射

# 在converter.py中添加
TYPE_MAPPING['MyCustomType'] = 'MyCppType'

10.2 添加自定义转换规则

class CustomConverter(PythonToCppConverter):
    def _convert_expression(self, expr: str) -> str:
        # 添加自定义表达式转换
        if 'my_special_function' in expr:
            return self._convert_special_function(expr)
        return super()._convert_expression(expr)

10.3 添加自定义验证规则

class CustomValidator(CppValidator):
    def _check_custom_rules(self, cpp_code: str) -> List[str]:
        errors = []
        # 添加自定义验证逻辑
        return errors

11. 已知限制与未来规划

11.1 当前限制

限制 描述 解决方案
动态类型 Python动态类型难以完全静态化 使用auto或模板
反射 Python反射无C++对应 手动实现或模板元编程
元类 Python元类无C++对应 使用模板或宏模拟
GIL Python GIL在C++不存在 重新设计多线程模型
垃圾回收 C++无自动GC 使用智能指针

11.2 未来规划

版本 功能
v1.1 更完善的异常处理转换
v1.2 生成器转迭代器类
v1.3 装饰器转模板/包装器
v1.4 上下文管理器转RAII
v2.0 支持C++14/17特性

11.3 贡献指南

  1. Fork项目

  2. 创建功能分支

  3. 提交变更

  4. 推送到分支

  5. 创建Pull Request


附录

A. 完整类型映射表

Python C++11 头文件
int int64_t <cstdint>
float double -
str std::string <string>
bool bool -
None nullptr -
list std::vector<T> <vector>
dict std::unordered_map<K,V> <unordered_map>
set std::unordered_set<T> <unordered_set>
tuple std::tuple<Args...> <tuple>
bytes std::vector<uint8_t> <vector>
Optional[T] std::optional<T> <optional>
List[T] std::vector<T> <vector>
Dict[K,V] std::unordered_map<K,V> <unordered_map>

B. 运算符映射表

Python C++
and &&
or ||
not !
is ==
is not !=
in find() != end()
not in find() == end()
** pow()
// / (整数除法)
% %

C. 文档资源


文档版本: 1.0.0 最后更新: 2025年3月28日

最近更新: 2026年3月28日 16:19:59
浏览: 13

[[total]] 条评论

添加评论
  1. [[item.time]]
    [[item.user.username]] [[item.floor]]楼
  2. 点击加载更多……
  3. 添加评论