如何从模板参数(std :: vector和普通指针)中提取value_type?

时间:2013-01-21 04:45:37

标签: c++ templates c++11

我有以下界面:

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

2 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:5)

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

typedef decltype(*first) value_type;

注意iterator_traits可能不适用于程序员定义的类型,如果程序员没有为其迭代器专门化iterator_traits,或者他没有定义符合标准要求的迭代器。

但是,decltype技巧即使在那时也会有效。