如何解决为什么我们使用迭代器类别而不是仅对迭代器进行相应的重载?
为迭代器考虑bash --version
GNU bash,version 3.2.57(1)-release (x86_64-apple-darwin18)
函数的典型(简化)实现:
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,std::input_iterator_tag)
{
while (n--)++it;
}
通过分支将所有advance_impl
编写到一个函数中,但让我们稍等一下。
为什么我们使用此方法而不是仅对相应的迭代器重载constexpr if
?为什么我们这里完全需要特质?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。