【发布时间】:2017-10-13 02:57:22
【问题描述】:
我想使用 Boost 循环缓冲区来存储由硬件 API 生成的数组。 API 获取内存位置的地址并相应地推送数组。所以我有以下内容:
typedef unsigned char API_data [10];
boost::circular_buffer<API_data> data(10);
boost::circular_buffer<API_data>::iterator it = data.begin();
但我无法将指针 it 传递给 API,因为:
不存在从“
boost::cb_details::iterator<boost::circular_buffer<API_data, std::allocator<API_data>>, boost::cb_details::nonconst_traits<boost::container::allocator_traits<std::allocator<API_data>>>>”到LPVOID的合适转换函数。
API 需要 LPVOID 类型的指针,但 it 指针的类型不同。
【问题讨论】:
-
it不是任何类型的指针。 -
您可能可以使用
&*it获取缓冲区的开始,但是虽然这很可能会编译,但我不希望它能够工作,因为循环缓冲区不仅是缓冲区,它还有一个开始和结束索引。而这些boost为你维护的索引也必须由硬件正确更新才能达到你想要的效果。 -
谢谢你们的投入!我假设
it是一个指针,因为 boost 循环缓冲区文档中的示例取消引用it以获得存储在该位置的值。除了令人困惑之外,我没有足够的经验来找到提升循环缓冲区文档。
标签: boost iterator buffer circular-buffer