我有以下界面:
template< class RandomIt >
void my_sort( RandomIt first, RandomIt last )
{
}
我希望RandomIt
是来自std::vector<T>.begin()/end()
的迭代器或普通指针类型T* first,T* last
。我想如果我认为RandomIt
是一个向量,我可以从RandomIt::value_type
得到它,但这对T* first,T* last
不起作用。
我的问题是,如何在两种情况下从模板参数中提取value_type T
?
答案 0 :(得分:16)
使用iterator_traits<T>::value_type
(cppreference)。请注意,标准库为T*
和const T*
提供了iterator_traits定义,因此它也适用于普通指针。
答案 1 :(得分:5)
由于您使用的是C ++ 11,因此您可以在迭代器本身上应用decltype
来获取value_type
:
typedef decltype(*first) value_type;
注意iterator_traits
可能不适用于程序员定义的类型,如果程序员没有为其迭代器专门化iterator_traits
,或者他没有定义符合标准要求的迭代器。
但是,decltype
技巧即使在那时也会有效。