0

假设我有一个结构

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 库。我认为这是因为 deque 中的元素不连续,而 vector 中的元素是连续的。我认为这可能是一个原因,但不确定。

4

1 回答 1

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
于 2012-06-14T18:03:49.837 回答