[英]Encountring error: no type named ‘iterator_category’ in ‘struct std::iterator_traits<std::vector<int> >
[英]What is a difference between iterator_category vs iterator_category() in std::iterator_traits
為什么在一種情況下我必須編寫不帶括號的 iterator_category:
template<typename Iterator>
void my_advance(Iterator &iter, int n)
{
if constexpr(std::is_same_v<
typename std::iterator_traits<Iterator>::iterator_category,
std::random_access_iterator_tag>)
iter += n;
else
for(int i = 0; i<n; ++i, ++iter);
}
在另一種情況下,帶括號:
template<typename Iterator, typename IterCategory>
void my_advance_helper(Iterator &iter, int n, IterCategory){
for(int i = 0; i < n; ++i, ++iter);
}
template<typename Iterator>
void my_advance_helper(Iterator &iter, int n, std::random_access_iterator_tag){
iter += n;
}
template<typename Iterator>
void my_advance(Iterator &iter, int n)
{
my_advance_helper(iter, n,
typename std::iterator_traits<Iterator>::iterator_category());
}
如果據我所知, iterator_traits::iterator_category 只是一個 typedef。 括號在最后一種情況下有什么作用? 他們是否以這種方式返回 iterator_category 的實際值? 看起來很明顯,但我需要一些確認。 對不起,問題可能很愚蠢=)
如果據我所知, iterator_traits::iterator_category 只是一個 typedef
正確的。
括號在最后一種情況下有什么作用?
這是臨時對象的值初始化的語法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.