如何用 ffi 包装自定义结构 std::vector?

How to wrap std::vector of custom structure with ffi?

我正在尝试为处理图像处理的动态 *.so 库创建一个 Ruby 包装器。其中一个函数 convert_x_to_z 有一个自定义的 typedef 输入参数。如果我映射 A 结构

,我如何传入 A 对象的向量
typedef struct image {
    uint16_t image_width;
    uint16_t image_height;
    uint16_t image_depth;
    uint8_t* data;
} A;

变成这样的FFI:Structure

 class A  < FFI::Struct
    layout :image_width , :int,
           :image_height, :int,
           :image_depth, :int,
           :data, :pointer
  end

假设我有一个变量 single,它是 class A 的一个实例。我如何将它包装到 class B 的数组中,它将代表 vector/array 的 classes A 并将其作为参数 const B &x 传递给函数 int32_t convert_x_to_z?

int32_t convert_x_to_z(
    const B &x,
    uint32_t &t,
    uint8_t* z);

这是 A class 的 B 向量或数组结构。

typedef std::vector<A> B;

你需要这样做:

int32_t convert_x_to_z_aux(const A &a, uint32_t &t, uint8_t* z) {
    std::vector<A> b(1, a); // create a vector with 1 element
    return convert_x_to_z(b, t, z);
}