當寫作「迭代」通用功能範圍,我通常做的:推斷類型的模板鍵入C++
template <typename Iter> auto func(Iter &first, Iter &last)
{
using IterType = typename std::decay<decltype(*first)>::type;
...
}
另一種方式似乎是:
template <typename Iter> auto func(Iter &first, Iter &last)
{
using IterType = typename std::iterator_traits<Iter>::value_type;
...
}
然而第三:
template <typename Iter> auto func(Iter &first, Iter &last)
{
using IterType = typename Iter::value_type;
...
}
沒有申請iterator_traits
。
從理論上講,我的函數應該只接收迭代器,如first
和last
,第二種形式理想地(imho)是最常用的方式來獲得類型。但是使用typename std::decay<decltype(*first)>::type
這個最通用的習慣用法是爲了不對Iter
施加限制,比如定義了一個value_type
?
我認爲這是按地理價值傳遞迭代器。 – Lingxi
如果'iterator_traits'對某些東西不起作用,則說某事不是迭代器。 –