【问题标题】:How to get type from generic pointer type? [duplicate]如何从泛型指针类型中获取类型? [复制]
【发布时间】:2017-04-18 12:51:17
【问题描述】:

我有下一个代码:

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));

那么RandomIt 就是int*,不是吗?并且decltype(*first) 返回int&amp; 而不是我需要的int。如何更改它以获取 int 类型?有可能吗?

【问题讨论】:

  • std::remove_reference_t&lt;decltype(*first)&gt;
  • 注意如果length 不是编译时常量,那么res[length] 不是标准C++。
  • @aschepler,它是一个常数。

标签: c++ c++11


【解决方案1】:

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

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

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

std::remove_reference_t<decltype(*first)>

【讨论】:

【解决方案2】:

您可以使用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];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 2010-10-22
    • 2013-04-17
    相关资源
    最近更新 更多