是否可以用带括号的初始化器列表构造boost::circular_buffer ?

Is it possible to construct a boost::circular_buffer with a braced initialiser list?

本文关键字:boost circular buffer 列表 初始化 是否      更新时间:2023-10-16

以下代码编译失败:

auto myCircularBuffer = boost::circular_buffer<int>{1,2,3,4};
与错误:

`error: no matching function for call to ‘boost::circular_buffer<int>::circular_buffer(<brace-enclosed initializer list>)’`

是否有另一种机制来构造boost::circular_buffer与一个带括号的初始化器列表或执行另一种形式的聚合初始化?还是我们必须把每个元素都推回去?

从文档来看,circular_buffer没有初始化列表重载。唯一真正的替代方案是一次推一个项,那就是InputIterator, InputIterator过载。

当然,您可以自由地创建自己的函数,使用InputIterator, InputIterator重载来允许您使用初始化列表:

template<typename T>
boost::circular_buffer<T> make_circular_buffer(const std::initializer_list<T>& init)
{
  return boost::circular_buffer<T>(init.begin(), init.end());
}
auto b = make_circular_buffer({1,2,3,4});