如何从通用指针类型获取类型?

时间:2017-04-18 12:51:17

标签: c++ c++11

我有下一个代码:

template<class RandomIt>
static void SelectionSort(RandomIt first, RandomIt last) {
    decltype(*first) res[length];
}

例如,我将此函数称为如下:

int test[] = { 1, 2, 3, 4 };
SelectionSort(std::begin(test), std::end(test));

然后RandomItint*,不是吗?并decltype(*first)返回int&而不是我需要的int。如何更改它以获得int类型?有可能吗?

2 个答案:

答案 0 :(得分:5)

您可以使用std::iterator_traits。它有一个名为value_type的类型,它将为您提供基础类型。对于指针类型T*,这意味着您获得T。所以在你的情况下你可以使用

template<class RandomIt>
static void SelectionSort(RandomIt first, RandomIt last) {
    typename std::iterator_traits<RandomIt>::value_type res[length];
}

答案 1 :(得分:5)

使用C ++ 11,您可以使用std::remove_reference,如下所示:

typename std::remove_reference<decltype(*first)>::type

或简单地(使用C ++ 14)

std::remove_reference_t<decltype(*first)>