考虑声明了以下函数的 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 类,并且 SomeClass.java
dealWithComplexClasses(SWIGTYPE_p_ComplexClass class)
如何告诉 Swig 只为我想在 Java 中公开的内容生成代码?或者忽略我不想公开的函数和类?
最佳答案
你做的是对的。 %ignore SomeClass::dealWithComplexClasses
应该有效,所以我怀疑您同时尝试了其他事情,并将错误解释为表明这无效。尝试:
%ignore ComplexClass; // will not wrap ComplexClass
%ignore SomeClass::dealWithComplexClasses; // do not wrap that method or any of its overloads
另一种可能性,但无法从您的帖子中看出,您的类位于命名空间中。在这种情况下,您需要在前面加上命名空间。
如果它仍然不起作用,需要更多信息,请为此发布一个最小的 .i 和 .h。
关于java - SWIG - 如何忽略我不需要公开的 C++ 类(在 Java 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22561233/