SWIG - Java 代理 Class 数组参数

SWIG - Java Proxy Class Array Parameter

我认为这将是一个简单的问题,但我很难找到答案。

我有一个用 C++ 定义的结构,比方说:

struct MyStruct
{
  int a;
  int b;
};

这被 SWIG 包装到 Java 代理 class MyStruct 中。我在 C++ 中有一个函数,它接受一个 struct MyStructs:

的数组
void myFunction(struct MyStruct arg[], int amount);

SWIG 看到一个指针参数,因此生成函数的 Java 包装器以使用单个 MyStruct 对象作为其参数:

void myFunction(MyStruct arg, int amount) { /**/ }

如何让 SWIG 生成 Java 函数来获取 MyStruct Java 对象的数组?我已经能够为原始类型的数组弄清楚它,但还没有找到一种方法让它适用于自定义包装类型。

所以我想要的 Java 函数签名是这样的:

void myFunction(MyStruct[] arg, int amount);

编辑:更新措辞以使用代理的正确 SWIG 命名法 classes.

我能够使用中间数组 class 创建工作解决方案,该中间数组是使用 carrays.i 中的 %array_class 以及 injavain 类型映射生成的。可以在我的 gist.

中找到包含该解决方案的完整工作示例

如果有人能提出更好的解决方案或改进,我将不胜感激。我的解决方案的一个缺点是您需要为每个您想要以这种方式使用的不同代理 class 创建一个额外的 Java 数组代理 class,这可能会使 Java API。这可以通过使用 javaclassmodifiers 类型映射使数组代理 classes 包私有来稍微改进。