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

标签 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 类,并且 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/

相关文章:

java - Swig - 为什么我们需要声明函数两次?

java - Java 初学者 - 字符串格式 = "| %-"+maxW[j] +"s"; - 这个字符串有什么作用?

android - OpenGL ES 3 实例渲染失败,但在桌面上工作

c++ - Boost spirit语法匹配嘈杂的输入

c# - C2259 : 'ATL::CComObject<Base>' : cannot instantiate abstract class

c++ - SWIG 将流从 python 传递到 C++

java - UnsatisfiedLinkError 在 Java 中使用 swig

java - 在 Android 中使用 JSON 数据的 ContentAdapter

java - 为什么 java 编译器会为单个 java 文件生成多个 .class 文件?

java - 试图理解 hashmap 数据结构