SWIG - Java代理类数组参数

时间:2017-10-25 15:08:09

标签: java c++ swig

我认为这会是一个简单的问题,但我找不到答案。

我有一个用C ++定义的结构,让我们说:

struct MyStruct
{
  int a;
  int b;
};

这被SWIG包装到Java代理类MyStruct中。我在C ++中有一个函数,它采用struct MyStruct s:

的数组
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代理类命名法。

1 个答案:

答案 0 :(得分:0)

我能够使用carrays.i中使用%array_class生成的中间数组类以及injavain类型映射创建工作解决方案。可以在我的gist中找到完整的解决方案工作示例。

如果有人能提出更好的解决方案或改进,那么我将不胜感激。我的解决方案的一个缺点是,您需要为您希望以这种方式使用的每个不同代理类创建一个额外的Java数组代理类,这可能会混乱Java API。通过使用javaclassmodifiers typemap使数组代理类package-private可以略微改进。