首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swig接口文件中swig生成的类

Swig接口文件中swig生成的类
EN

Stack Overflow用户
提问于 2012-01-10 16:10:03
回答 2查看 345关注 0票数 0

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

我该怎么做呢?

我有这样的c++函数:

代码语言:javascript
复制
bool foo(class1& parm);

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

EN

回答 2

Stack Overflow用户

发布于 2012-01-10 16:23:22

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

票数 0
EN

Stack Overflow用户

发布于 2012-01-12 05:58:01

对于SWIG一无所知的类型(也就是说,除了转发声明之外什么都没见过),它能生成的最好的包装器大致反映了你可以用C++中的转发声明类所做的事情--它被包装成一个行为类似于不透明指针的东西。这就是您看到的SWIG_P_class1。你可以用它做一些明智的事情,例如,如果你有一个方法返回实例的引用或指针,你可以调用它来获得一个对象来传递给foo

然而,你可能不想在实际的接口中使用那么多,所以给出一个我们想要包装的头文件,如下所示:

代码语言:javascript
复制
class class1;

bool foo(class1& parm);

您可以通过为SWIG提供class1的部分定义(如果您愿意,也可以是完整的定义)来合理地包装它,例如:

代码语言:javascript
复制
%module test

class class1 {
};

%include "test.hh"

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

代码语言:javascript
复制
test.foo(new class1());

正如你所希望的那样。

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

代码语言:javascript
复制
%module test

%{
#include "class1_defined_here.hh"
%}

class class1 {
};

%include "test.hh"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8800232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档