7

我有一个具有以下界面的排序:

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在这两种情况下如何从模板参数中提取?

4

2 回答 2

16

使用iterator_traits<T>::value_typecppreference)。请注意,标准库为T*and提供了 iterator_traits 定义const T*,因此它也适用于普通指针。

于 2013-01-21T04:47:02.350 回答
5

由于您使用的是 C++11,因此您可以应用decltype迭代器本身来获取value_type

typedef decltype(*first) value_type;

iterator_traits如果程序员没有专门iterator_traits针对他的迭代器,或者他没有定义满足标准要求的迭代器,则注释可能不适用于程序员定义的类型。

但是,decltype即使那样,这个技巧也会奏效。

于 2013-01-21T05:04:42.407 回答