[英]determine variable type by iterators c++
我有一些泛型函數正在返回某些類型為<T>
變量。 我將一些2個迭代器傳遞給該函數。 然后,我嘗試使用function distance
來計算向量的大小。 在v_size
內部,我定義了一個新的類型定義,稱為v_size
,但是向量的<T>
類型是未知的。 如何通過僅傳遞迭代器來計算向量的大小?
template<class In, class T>
T my_func(In b, In e)
{
typedef typename vector<T>::size_type v_size;
v_size size = distance(b, e);
...
...
}
如果要獲取迭代器指向的類型,可以使用std :: iterator_traits 。 例如
template<class In>
auto my_func(In b, In e) -> typename std::iterator_traits<In>::value_type
{
using T = typename std::iterator_traits<In>::value_type;
...
}
順便說一句:我刪除了第二個模板參數T
,它只出現在返回類型聲明中,然后不能自動推導。 否則,在調用函數時必須明確指定它。
您可以做三件事:通過迭代器的operator*()
using v_size = vector<std::remove_reference<decltype(*b)>::type>::size_type;
類型: using v_size = vector<std::remove_reference<decltype(*b)>::type>::size_type;
或使用距離函數的返回類型using v_size = std::decltype(distance(b, e));
類型: using v_size = std::decltype(distance(b, e));
或者甚至更好的是,完全刪除v_size並讓編譯器扣除類型: auto size = std::distance(b, e);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.