为多个参数对定义一次 SWIG 类型映射

Define SWIG typemaps once for multiple argument pairs

我已经使用特定于两个参数的类型和名称的 %typemap 成功地将 buffer-pointer/buffer-length 对映射到 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) {
     = jenv->GetDirectBufferAddress($input);
     = (long)(jenv->GetDirectBufferCapacity($input));
}

我可以像这样痛饮一个 C++ 方法:

int32_t getArrayData( void * outBuffer, int32_t bufferLen );

进入 Java 绑定,例如:

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

但现在我想痛饮一个 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 中可行吗?

11.1.4 Reusing typemaps and 11.2.3 Copying a typemap 中的 SWIG 手册所述,您可以使用 %apply 轻松复制其他签名或类型的现有(多参数)类型映射。在你的情况下你可能需要

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

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