SWIG - 如何忽略我不需要公开的C ++类(用Java)?

时间:2014-03-21 14:12:14

标签: java c++ swig

考虑SomeClass.h并声明以下函数

void doSomethingSimple(double);
void dealWithComplexClasses(ComplexClass&);

我想在Java中公开doSomethingSimple(double),但不是dealWithComplexClasses(ComplexClass&)

我尝试了各种各样的事情,例如:

%ignore SomeClass::dealWithComplexClasses(ComplexClass&);
%ignore SomeClass::dealWithComplexClasses;

我还发现this SO question已经回答但没有帮助我(虽然问题类似但我必须遗漏一些东西) 但最后Swig总是为ComplexClass创建一个代理java类,dealWithComplexClasses(SWIGTYPE_p_ComplexClass class)

中有一个SomeClass.java

如何告诉Swig仅为我想要在Java中公开的代码生成代码?或者忽略我不想公开的函数和类?

2 个答案:

答案 0 :(得分:9)

你正在做正确的事。 %ignore SomeClass::dealWithComplexClasses应该有效,所以我怀疑你是在同时尝试其他事情,并将错误解释为表明这没有用。尝试:

%ignore ComplexClass; // will not wrap ComplexClass
%ignore SomeClass::dealWithComplexClasses; // do not wrap that method or any of its overloads

另一种可能性,但无法从您的帖子中看出,您的类是在命名空间中。在这种情况下,您需要预先添加名称空间。

如果它仍然不起作用,需要更多信息,为此发布最小的.i和.h。

答案 1 :(得分:4)

您可以直接在C ++代码中使用预处理工具:

void doSomethingSimple(double);
#ifndef SWIGJAVA
void dealWithComplexClasses(ComplexClass&);
#endif

请参阅:http://www.swig.org/Doc1.3/Preprocessor.html#Preprocessor_condition_compilation