考虑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中公开的代码生成代码?或者忽略我不想公开的函数和类?
答案 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