为什么我们使用迭代器类别而不是仅对迭代器进行相应的重载?

问题描述

为迭代器考虑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 (将#修改为@)