java - 为多个参数对定义一次 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 ) {
没有:
- 复制
%typemaps
以上所有内容并在每个参数名称的末尾添加一个“1”。 - 通过从上面删除所有参数名称来匹配所有
void*
/int32_t
参数对%typemaps
。 - 在 *.i 文件上运行预处理器。
这在 SWIG 中可行吗?
解决方案
如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)
。
推荐阅读
- php - 如何在 PHP 中删除对象数组
- datatable - 动态启用数据表中的排序
- python - Pythin gi 模块和 OSX Catalina 之间是否存在冲突?
- excel - 反向循环 - 将单元格倒数到 1
- bash - 前任不知道VCS
- python - 如何从没有默认包的 yml 创建 conda env?
- background - SwiftUI - 上下文菜单背景颜色
- listview - 搜索栏获取文本但不过滤列表
- google-apps-script - Google Apps Script Utilities.base64Decode 异常:无法解码字符串
- neo4j - Neo4j 错误 | 列表
| 错误-org.neo4j.ogm.exception.core.InvalidPropertyFieldException