gpt4 book ai didi

java - 无法弄清楚如何让 SWIG/Java 强制代理类实现接口(interface)

转载 作者:搜寻专家 更新时间:2023-11-01 02:16:26 27 4
gpt4 key购买 nike

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

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

我更愿意让 SWIG 生成“实现 X”代码,因为后来尝试添加该实现被证明是困难的。例如,如果我尝试子类化 SWIG 代理然后实现接口(interface),我会遇到问题,因为我也在使用泛型:

interface IVector<VectorType> {
VectorType add(VectorType other);
...
}

所以这样的事情失败了:

class MyVector extends MyProxyVector implements IVector<MyVector> {
MyVector add(MyVector other) {
return (MyVector) super.add(other);
}
}

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

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

最佳答案

这应该通过 typemaps mechanism 处理.以下代码:

%module test

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

struct Foo {
};

Foo 设置基础和接口(interface),如下所示:

public class Foo extends SomeBase implements SomeInterface {

//...

在生成的 Java 代理类中。

关于java - 无法弄清楚如何让 SWIG/Java 强制代理类实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5477747/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com