Swig在swig接口文件中生成了类

时间:2012-01-10 08:10:03

标签: java c++ swig

我正在使用SWIG生成Java类,我有3个不同的类,一个依赖于其他类。 SWIG指向这些类,因为它不知道它,我需要SWIG使用创建的Java类而不是SWIG创建的指针。

我该怎么做?

我有这样的c ++函数:

bool foo(class1& parm);

现在我使用SWIG在Java中创建class1,我想让SWIG使用它创建的参数fooclass1包装在Java中,而不是SWIG_P_class1。我没有办法做到这一点。

2 个答案:

答案 0 :(得分:0)

Swig隐藏了所使用的实际类或对象之类的细节。如果你想访问真正的Java对象和类,我建议你使用JNI(它可以让你访问所有东西并且可能更快)

答案 1 :(得分:0)

对于SWIG一无所知的类型(即,除了前向声明之外还没有看到任何内容),它可以生成的最佳包装器大致反映了在C ++中使用前向声明的类可以做什么 - 它被包装成行为的东西像一个不透明的指针。这是您看到的SWIG_P_class1。你可以用这个来做明智的事,例如如果你有一个返回引用或指向实例的指针的方法,你可以调用它来将对象传递给foo

但是你可能不想在实际接口中使用那么多,所以给定一个头文件我们想要包装它看起来像:

class class1;

bool foo(class1& parm);

您可以通过向SWIG提供class1的部分(或完整,如果您愿意)定义来明智地包装它,例如:

%module test

class class1 {
};

%include "test.hh"

将导致合理的class1foo在Java端公开,因此您可以在Java中使用它们,如下所示:

test.foo(new class1());

完全按照你的意愿。

您当然需要为生成的C ++提供class1类的足够知识,就像使用任何其他C ++代码一样。最简单的方法是使SWIG界面看起来像:

%module test

%{
#include "class1_defined_here.hh"
%}

class class1 {
};

%include "test.hh"
相关问题