首页 > 解决方案 > 为什么我们使用迭代器类别而不是相应地重载迭代器?

问题描述

考虑一个典型的(简化的)std::advance迭代器函数实现:

template<typename Iterator,typename Dist>
void advance(Iterator& it, Dist n) 
{
    typedef std::iterator_traits<Itarator>::iterator_category c;
    advance_impl(it, n, c);
}

template<typename Iterator, typename Dist>
void advance_impl(Iterator& it, Dist n, std::random_access_iterator_tag)
{
    it += n;
}

template<typename Iterator, typename Dist>
void advance_impl(Iterator& it, Dist n, std::input_iterator_tag)
{
    while (n--)++it;
}

我知道我们可以advance_impl使用 分支在一个函数中编写所有constexpr if内容,但让我们暂时搁置一下。

为什么我们使用它而不是仅仅std::advance为相应的迭代器重载?为什么我们在这里需要特质?

标签: c++templatesiteratoroverloadingtraits

解决方案


推荐阅读