是否可以使用支撑的初始化列表构造boost :: circular_buffer?

时间:2016-08-30 14:05:09

标签: c++ boost

以下无法编译:

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或执行其他形式的聚合初始化?或者我们必须推送每个元素吗?

1 个答案:

答案 0 :(得分:3)

从查看the docs开始,circular_buffer没有初始化列表重载。推送项目的唯一真正替代方案是InputIterator, InputIterator overload

当然,您可以自由创建使用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});