用其他std容器清除std::queue的模板特化

  • 本文关键字:std queue 清除 其他 c++ templates
  • 更新时间 :
  • 英文 :


我创建了一个函数Clear,它接收不同数量的参数,并清除这些容器

inline void Clear() {}
template <class First, class ...Rest>
void Clear(First&& first, Rest&&... rest)
{
std::forward<First>(first).clear();
Clear(std::forward<Rest>(rest)...);
}

所以可以用它来清除任何类型的std容器,如std::set、std::unordered_set、std::map等。但是std::queue没有.clear()方法,所以我尝试专门化它

template <typename T>
void Clear(std::queue<T>& q)
{
std::queue<T> empty;
std::swap(q, empty);
}

在任何std::队列上调用Clear都可以工作,但它不与其他Clear函数集成。显然,我希望Clear的可变参数版本能够与专门化一起工作。帮助吗?好奇的是,生成的程序集与在每个容器中使用.clear()和使用此模板相比如何?

您可以将迭代和作业拆分为一个元素,如:

template <typename T>
void Clear(std::queue<T>& q) {
std::queue<T> empty;
std::swap(q, empty);
}
template <typename C>
void Clear(C& c) {
c.clear();
}
template <typename ... Ts>
void Clear(Ts&... ts) {
(Clear(ts), ...);
}

相关内容

  • 没有找到相关文章

最新更新