使用deque与C库

时间:2012-06-14 17:58:40

标签: c++ c stl vector deque

假设我有一个结构

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

如果使用C库初始化带有std :: deque的结构,那么它将无效。

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

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

1 个答案:

答案 0 :(得分:7)

S的任何版本都不适用于C库 这是因为C没有关于如何布置类(或者甚至是其中的内容)的任何概念。

如果传递元素的地址,则Vector可以与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