我如何从模板参数中提取value_type (std::vector和plain pointer)

How do I extract the value_type from template parameters (std::vector and plain pointer)?

本文关键字:std type vector pointer plain value 提取 参数      更新时间:2023-10-16

我有一个具有以下接口的排序:

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 ?

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

由于您使用的是c++ 11,您可以在迭代器本身上应用decltype来获得value_type:

typedef decltype(*first) value_type;

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

然而,decltype技巧即使在这种情况下也会起作用。

相关文章: