无法弄清楚如何使SWIG/Java强制一个代理类来实现一个接口

Abe*_*der 4 java proxy swig interface

我正在使用SWIG将c ++类导出到Java,但是在尝试强制代理对象实现接口时遇到了问题.

我搜索了SWIG文档,发现你可以使用"%pragma(java)jniclassinterfaces = x"让JNI类实现给定的接口,并使用"%pragma(java)moduleinterfaces = x"让模块实现任何给定的接口,但实际代理对象没有相应的编译指示.

我希望让SWIG生成'implements X'代码,因为稍后尝试添加该实现是很困难的.例如,如果我尝试子类化SWIG代理然后实现接口,我会遇到问题,因为我也使用泛型:

interface IVector<VectorType> {
   VectorType add(VectorType other);
   ...
}
Run Code Online (Sandbox Code Playgroud)

所以这样的事情失败了:

class MyVector extends MyProxyVector implements IVector<MyVector> {
    MyVector add(MyVector other) {
        return (MyVector) super.add(other);
    }
}
Run Code Online (Sandbox Code Playgroud)

因为它需要将父类转换为子类.

我能解决这个问题的唯一方法是创建一个包装类或使用一个复制构造函数.两者似乎都有点低效,因为它们实现了一个接口的全部目的.

Fle*_*exo 6

这应该通过类型映射机制来处理.以下代码:

%module test

%typemap(javainterfaces) Foo "SomeInterface"
%typemap(javabase) Foo "SomeBase"

struct Foo {
};
Run Code Online (Sandbox Code Playgroud)

设置基数和接口Foo,如下所示:

public class Foo extends SomeBase implements SomeInterface {

//...
Run Code Online (Sandbox Code Playgroud)

在生成的Java代理类中.