簡體   English   中英

std::iterator_traits 中的 iterator_category 與 iterator_category() 有什么區別

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM