簡體   English   中英

通過迭代器確定變量類型C ++

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

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