从C++生成C包装器?

num*_*ric 19 c c++ ffi wrapper

我想从C++库生成C包装器.有关如何手动完成的教程:

但这太过于体力劳动.

例如,为此:

struct RtAudio {
    virtual DeviceInfo const& f() {...}
    class DeviceInfo {
        virtual void g() { ... }
    };
    ...
};
Run Code Online (Sandbox Code Playgroud)

我需要写:

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) {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有可以自动执行此过程的工具?

Sah*_*has 1

gmmproc 可以为基于 gobject 的 C 库创建 C++ 包装器,但这是我听说过的唯一介于 C 和 C++ 之间的代码生成器。

如果您擅长编写解析器,那么创建基本的包装器生成器并不是一项太困难的任务。最后你可能需要手动添加一些收尾工作,但仍然会减少你的工作量。