首页 > 解决方案 > 使用 SWIG 在 c++ 和 java 之间创建接受 std::vector(映射到 ByteBuffer)的 std::function

问题描述

我试图拼凑以下代码: SWIG typemap uint8_t* from C/C++ to java.nio.ByteBuffer

将 java.nio.ByteBuffer 从 java 传递到 std::array& 以进行 C++ 调用。

我想在 如何使用 SWIG 包装 std::function 对象中从https://stackoverflow.com/users/168175/flexo回答类似的事情 对于 std::function (但我可以接受简单的答案)。

特别是我想要一个可以实现 java 的 Java 回调类

std::function<void(const std::vector<uint8_t> &)>

在 C++ 方面,

uint32_t registerForEvent(const std::vector<uint8_t> &event, std::function<void(const std::vector<uint8_t> &)> process)

并让 c++ 端调用该函数并让 java 端能够覆盖/实现调用:

public class myCallback extends Callback {
   public void call(java.nio.ByteBuffer data) {
      /* do something with data */
   }
}

我想我需要使用 env->NewDirectByteBuffer(ptr,size) 从 C/C++ 的 SWIG 类型映射 uint8_t* 到从 C++ 发送的 std::vector& 初始化的 java.nio.ByteBuffer 与参数/解包一起发生/lvalref/转发。

通用 VA_ARGS 宏是否有一些偷偷摸摸的方法来实现这一点?甚至只是我对特定 std::function 的简单案例的一个例子:

标签: javac++swig

解决方案


推荐阅读