首页 > 解决方案 > 为多个参数对定义一次 SWIG 类型映射

问题描述

%typemap我已经使用特定于两个参数的类型和名称成功地将缓冲区指针/缓冲区长度对映射到 ByteBuffer 。

对于同一方法中的多对参数,我该如何做同样的事情,没有类型映射的近乎冗余副本,并且仅按类型匹配?

细节

例如,使用这些类型映射:

%typemap(jni) (void *outBuffer, int32_t bufferLen ) "jobject"
%typemap(jtype) (void *outBuffer, int32_t bufferLen) "java.nio.ByteBuffer"
%typemap(jstype) (void *outBuffer, int32_t bufferLen) "java.nio.ByteBuffer"
%typemap(javain) (void *outBuffer, int32_t bufferLen) 
"$javainput"
%typemap(javaout) (void *outBuffer, int32_t bufferLen) {
    return $jnicall;
}
%typemap(in) (void *outBuffer, int32_t bufferLen) {
    $1 = jenv->GetDirectBufferAddress($input);
    $2 = (long)(jenv->GetDirectBufferCapacity($input));
}

我可以 SWIG 一个 C++ 方法,例如:

int32_t getArrayData( void * outBuffer, int32_t bufferLen );

进入 Java 绑定,如:

public int getArrayData( java.nio.ByteBuffer outBuffer ) { ...}

但现在我想 SWIG 一种 C++ 方法来获取两个参数对:

int32_t getArrayData( void * outBuffer, int32_t bufferLen,
    void * outBuffer1, int32_t bufferLen1 );

并使用 Java:

public int getArrayData( java.nio.ByteBuffer outBuffer,
   java.nio.ByteBuffer outBuffer1 ) { 

没有:

这在 SWIG 中可行吗?

标签: javaswig

解决方案


如11.1.4 重用类型映射11.2.3 复制类型映射中的 SWIG 手册中所述,您可以使用%apply. 在您的情况下,您可能需要

%apply (void *outBuffer, int32_t bufferLen) { (void *outBuffer1, int32_t bufferLen1) };

复制所有存在的类型映射(void *outBuffer, int32_t bufferLen)to (void *outBuffer1, int32_t bufferLen1)


推荐阅读