我认为这将是一个简单的问题,但我很难找到答案。
我有一个用 C++ 定义的结构,比方说:
struct MyStruct
{
int a;
int b;
};
这被 SWIG 包装到 Java 代理类 MyStruct
中。我在 C++ 中有一个函数,它采用 struct MyStruct
数组:
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 命名法。
最佳答案
我能够使用来自 carrays.i 的 %array_class
以及 in
和 javain
生成的中间数组类来创建工作解决方案类型图。可以在我的 gist 中找到包含该解决方案的完整工作示例。 .
如果有人能提出更好的解决方案或改进,我将不胜感激。我的解决方案的一个缺点是您需要为每个您希望以这种方式使用的不同代理类创建一个额外的 Java 数组代理类,这可能会使 Java API 变得困惑。这可以通过使用 javaclassmodifiers
类型映射使数组代理类包私有(private)来稍微改进。
关于java - SWIG - Java 代理类数组参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46935969/