SWIG:一个struct数组的getter / setter不返回/期望Java中的代理类数组

时间:2016-02-04 14:20:47

标签: java c++ swig

我尝试在SWIG的帮助下为C ++接口的Java生成足够的接口。一般来说它工作得很好,但现在我遇到了一个(绑定)结构数组的问题。

我有以下两种结构:

typedef struct
{
    char* street;
    char* city;
} Address;

typedef struct
{
    char* firstname;
    char* lastname;
    Address addresses[4];
} Person;

Person结构的地址字段的getter和setter是:

public Address getAddresses() { /*...*/ }
public void setAddresses(Address value) { /*...*/ }

使用这些访问器,我没有机会获得或设置阵列中的第二个,第三个或第四个地址。我做错了什么?如何通过索引访问数组项?

最好的解决方案是Java生成的代码,如下所示:

public class Person {
    /* here: ctor, cPtr, finalize method, ... */
    /* here: getters and setters for firstname and lastname */ 

    private final java.util.List<Address> addresses = new java.util.AbstractList<Address>() {
        @Override
        public int size() { return 4; }

        @Override
        public Address set(int index, Address address) {
            Address result = get(i);

            /* call adequate MyModuleJNI method 
               for setting the address at specified index */

            return result;
        }

        @Override
        public Address get(int index) {
            return /* call adequate MyModuleJNI 
                      for getting the address at specified index */;
        }
    }

    public List<Address> getAddresses() {
        return addresses;
    }
}

我怎样才能达到这样的效果? (涉及哪些类型映射?如何获取size方法的数组大小,...)

如果有人可以引导我走向正确的方向,那就太好了。

0 个答案:

没有答案