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

时间:2015-10-02 09:36:17

标签: c++ ruby vector 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,它是A类的一个实例。我如何将它包装到一个B类数组中,它将表示类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);

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

typedef std::vector<A> B;

1 个答案:

答案 0 :(得分:1)

你需要这样做:

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);
}