3

使用 SWIG 包装 octave 的 C++ API 的最佳方法是什么?

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

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

4

1 回答 1

1

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

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

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

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

因此,一种选择是复制标题并修改它们,直到它们适合 SWIG,或者只是去掉你不想包装的所有内容。在许多情况下,您还可以 % 包含未修改的标头,并 % 忽略您不想要的类和函数。

如果您想对某些数据类型进行特殊处理,请准备好使用类型映射。

于 2012-06-09T20:20:42.437 回答