You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在现有C++程序中插入并执行外部生成的C++代码?

需求实现方案说明

你的需求完全可以实现,C++生态下有两类成熟的实现路径,可根据你的实际场景选择:

方案1:编译期整合(优先推荐,性能最高、实现最简单)

C++是编译型语言,只要你生成代码的步骤可以放在主程序编译之前执行,选这个方案即可:

  • 先调整生成的代码结构,把它改成可被主程序引用的头文件/源文件,示例如下:
    // 将生成文件重命名为generated_code.h,添加头文件保护和必要的引用
    #pragma once
    #include "FirstClass.h"
    #include "SecondClass.h"
    
    inline std::pair<FirstClass, SecondClass> build_generated_objects() {
        FirstClass first = FirstClass();
        first.add(*some data1*);
        first.add(*some data2*);
        // ... 其余生成的first.add逻辑
        SecondClass second = SecondClass();
        second.add(*some data1*);
        // ... 其余生成的second.add逻辑
        return {std::move(first), std::move(second)};
    }
    
  • 主程序直接引用该头文件调用即可,修改后的主程序逻辑:
    #include "generated_code.h"
    
    int main() {
        auto [first, second] = build_generated_objects();
        MyClass obj = MyClass();
        obj.use(first, second);
    }
    
  • 最后在构建脚本(Makefile/CMake/VS生成事件等)里加自定义步骤,先执行你的代码生成程序,再编译主程序,整个流程可以完全自动化。

方案2:运行时动态执行(仅适合代码需要在主程序启动后才生成的场景)

如果你的C++代码是主程序运行过程中才动态生成的,无法提前参与编译,可以用动态加载的方式实现:

  • 执行步骤:
    1. 主程序生成代码后,调用系统内置的C++编译器,把生成的代码编译为对应平台的动态链接库(Windows下是.dll,Linux下是.so,Mac下是.dylib),编译时需要保证头文件路径、依赖库和主程序完全一致,同时要在生成的代码里导出获取first、second对象的接口。
    2. 主程序调用系统原生的动态库加载接口(Windows下LoadLibrary,Linux下dlopen)加载生成的动态库,拿到导出的函数指针后调用,即可拿到对应的first、second对象使用。
  • 注意事项:
    • 运行环境必须安装和主程序编译版本一致的C++编译器
    • 需要额外处理代码编译错误、动态库加载失败等异常场景
    • 运行时执行不可信的生成代码有安全风险,可能导致主程序崩溃

你示例中直接调用do_cpp_code_from_file后就直接使用变量的写法无法直接实现:C++是静态强类型语言,所有变量的类型必须在编译期就确定,运行时动态生成的变量不能直接在主程序代码里引用,必须通过函数返回值、全局变量、指针等编译期可识别的载体传递。

内容的提问来源于stack exchange,提问作者maksonnie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 19:27:08