将 deque 与 C 库一起使用
using deque with C library
假设我有一个结构
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
相关文章:
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 将fold表达式与std::一起用于两个元组
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 将 std::allocate_shared 与多态资源分配器一起使用
- Capacity of a deque
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 将 exprtk 与自定义类的对象一起使用
- 将 std::set 与基于键的比较器一起使用
- 将 C++ 类与 Rcpp 一起使用,从 C 或 R 修改它
- 如何将 Eigen::Ref 与 pybind11 一起使用?
- 如何将AERT_Allocate与 std:vector 一起使用
- 将 deque 与 C 库一起使用