从C++;? < >我想从C++库中生成C包装器。 有关于如何手动操作的教程:

从C++;? < >我想从C++库中生成C包装器。 有关于如何手动操作的教程:,c++,c,wrapper,ffi,C++,C,Wrapper,Ffi,但这是太多的体力劳动 例如,为此: struct RtAudio { virtual DeviceInfo const& f() {...} class DeviceInfo { virtual void g() { ... } }; ... }; 我需要写: struct RtAudioC { RtAudio x; }; struct DeviceInfo { RtAudio::DeviceInfo x; }; exte

但这是太多的体力劳动

例如,为此:

struct RtAudio {
    virtual DeviceInfo const& f() {...}
    class DeviceInfo {
        virtual void g() { ... }
    };
    ...
};
我需要写:

struct RtAudioC {
    RtAudio x;
};
struct DeviceInfo {
    RtAudio::DeviceInfo x;
};
extern "C" {
    RtAudioC* newRtAudio() { 
        return new RtAudioC;
    }
    void deleteRtAudio(RtAudioC *p {
        delete p;
    }
    /* do something with RtAudio::f() */
    void g(DeviceInfo *p) {
        try {
            p->x.g();
        } catch (SomeError & err) {
        }
    }
}

<> P>有GMPROC,它为GOBEDT的C库创建C++包装,但这是我在C和C++之间唯一听说过的代码生成器。
如果您擅长编写解析器,那么创建一个基本的包装生成器就不会太难了。最后,您可能需要手动添加一些收尾工作,但您的工作量仍然会减少。

您可以尝试,C代码生成器是去年的GSoC项目。好了,他们还没有将它合并到主干中,所以您必须从SVN签出并构建分支。

我不知道有现成的工具可以做到这一点。如果你想自动生成并乐于编写自己的脚本,(基于)是解析C++标题的一个很好的方法。

< p>你的C++代码已经写了多少,还有多少还没有写?
如果要编写合理的比例,我将创建一个简化的语法,它既可以生成C++,也可以生成C标题,就像COM接口的IDL一样。这种简化语法比C++更容易解析,或者你可以找到一些现成的东西。

< P>我在Python中开发了一个C函数包装器,正好做到这一点(生成C++函数包C函数)。 它还很年轻,但我需要它做的大部分事情现在都在那里了。试试看,让我知道你的想法: