使用SWIG包装octave的C ++ API

时间:2012-06-05 22:14:55

标签: c++ d swig octave

使用SWIG封装八度音阶C ++ API的最佳方法是什么?

我需要的只是接口文件(类似于wrap_octave.i),它可以用来生成另一种语言的包装器(在我的情况下是D,但它应该没关系)。

我可以通过在接口文件中明确地编写它们来包装单个函数,但这很费力。如果I%在接口文件中包含头文件,则不清楚要包含哪些头文件而不生成编译器错误。 注意:包装器的目标语言不是八度音;相反,我想通过C ++ api在另一种语言中使用嵌入式八度音程。

1 个答案:

答案 0 :(得分:1)

我不确定你想要什么,但SWIG不提供简单的快捷方式,例如“不要包装任何不受支持的东西”。它不包括递归,这通常很好地避免包装你不想要的东西,但这意味着你需要手动管理%include命令。如果以错误的顺序提供依赖项,SWIG可能会生成错误的代码而不会发出错误或警告消息。

在我的库中,我控制了头文件,因此我可以轻松地排除我不想要的东西,例如。

#ifdef SWIG
#define INTERNAL protected
#else
#define INTERNAL public
#endif

class Foo {
public:
    void Bar();
INTERNAL: // hide from SWIG
    void Baz();
};

所以一个选项是复制标题并修改它们直到它们适合SWIG,或者只删除你不想包装的所有内容。在许多情况下,您还可以%包括未修改的标题,%忽略您不想要的类和函数。

如果您需要对某些数据类型进行特殊处理,请务必使用打字机。