假设我有一个结构
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库。 我认为这是因为双端队列中的元素不是连续的,而向量中的元素是连续的。我认为这可能是一个原因,但不确定。
答案 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