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