将 deque 与 C 库一起使用

using deque with C library

本文关键字:一起 deque      更新时间:2023-10-16

假设我有一个结构

struct s
{
     std::deque<Object> q; //won't work  with C library
}

如果使用 C 库初始化带有 std::d eque 的结构,那么它将不起作用。

struct s
{
     std::vector<Object> v; //would work with C library
}

但是,这种带有 std::vector 的结构适用于 C 库。我认为这是因为 deque 中的元素不是连续的,而向量中的元素是连续的。我认为这可能是一个原因,但不确定。

S的两个版本都不适用于 C 库。
这是因为 C 对类的布局方式(甚至其中的内容)没有任何概念。

如果传递元素的地址,则向量可以与 C 库一起使用。因为所有元素都在连续内存中,所以它看起来像一个普通的指针,因此任何接受指针的 C 函数都可以工作。

struct Object { /* NORAML POD Object */ };
extern "C" void cFunctionCall(Object* data, size_t size);

std::vector<Object>   v;
// initialize v
cFunctionCall(&v[0], v.size()); // This will work because all members of v
                                // are in contiguous memory