使用SWIG封装八度音阶C ++ API的最佳方法是什么?
我需要的只是接口文件(类似于wrap_octave.i),它可以用来生成另一种语言的包装器(在我的情况下是D,但它应该没关系)。
我可以通过在接口文件中明确地编写它们来包装单个函数,但这很费力。如果I%在接口文件中包含头文件,则不清楚要包含哪些头文件而不生成编译器错误。 注意:包装器的目标语言不是八度音;相反,我想通过C ++ api在另一种语言中使用嵌入式八度音程。
答案 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,或者只删除你不想包装的所有内容。在许多情况下,您还可以%包括未修改的标题,%忽略您不想要的类和函数。
如果您需要对某些数据类型进行特殊处理,请务必使用打字机。