我创建了一个函数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), ...);
}