我想从C ++库生成C包装器。 有关如何手动完成的教程:
但这太过于体力劳动了。
例如,为此:
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) {
}
}
}
是否有可以自动完成此过程的工具?
答案 0 :(得分:2)
您可以尝试SWIG,C代码生成器是去年的GSoC项目。 AFAIK他们还没有把它合并到后备箱,所以你必须结账&从SVN建立分支。
答案 1 :(得分:2)
我刚刚用Python开发了一个C函数包装器来完成这个(生成包装C函数的C ++类)。
它还很年轻,但我现在需要做的大部分工作就在那里。试一试,让我知道你的想法:https://github.com/mlb5000/CFunctionWrapperGenerator
答案 2 :(得分:1)
有gmmproc为基于gobject的C库创建C ++包装器,但这是我在C和C ++之间听说过的唯一代码生成器。
如果您对编写解析器很擅长,那么创建基本包装器生成器并不困难。最后,您可能需要手动添加一些最后润色,但仍然会减少您的工作量。
答案 3 :(得分:1)
您已经编写了多少C ++代码而未编写多少代码? 如果要写一个合理的比例,我会创建一个简化的语法,生成C ++和C头,就像IDL对COM接口一样。这个简化的语法比C ++更容易解析,或者您可能会发现现成的东西。
答案 4 :(得分:0)