簡體   English   中英

功能模板:默認類型參數

[英]Function template: default type parameter

我正在通過加速的c ++進行練習,目前正在研究有關泛型函數的章節。 我遇到了一種我想編寫的算法,我認為它是給定迭代器的value_type的。 我碰到了這篇文章函數模板的Default template arguments ,這很有幫助,但是我想知道我的方法是否正確。 如果確實如此,我不想養成一個壞習慣。

template <class ForwardIt, class BinaryOp = std::greater<std::iterator_traits<ForwardIt>::value_type> >

ForwardIt maxInRange(ForwardIt begin, ForwardIt end, BinaryOp op = BinaryOp()) {
    // test here to reduce the loop count by 1

    if (begin == end)
      return begin;

    ForwardIt largest = begin;

    while (++begin != end)
        if (op(*begin, *largest))
            largest = begin;

    return largest;
}

另一個問題,對不起。 關於BinaryOp類型參數的語法如何工作? 我不太了解如何像調用函數一樣調用類型會產生類似替代的效果。 謝謝你的時間。 我真的很感激。

BinaryOp op = BinaryOp()正在從默認構造的臨時副本中復制初始化BinaryOp的實例。 默認模板參數是std::greater ,它是BinaryOp別名的默認類型。 在任何類類型上使用()都會導致構造函數調用。 在此代碼中,您將創建類型為std::greater的默認參數。

接下來,在調用op() ,實際上是在調用成員運算符bool operator()(const value_type&, condt value_type&) 這使op可以像功能對象一樣工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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