如何使用decltype将vector元素的类型作为模板参数

问题描述 投票:1回答:1

这是我的代码的一部分:

int getLength(const vector<int> &arr) {
    auto  n=arr.size(),dis=n;
    unordered_map<int,decltype(dis)> S;
    //...
}

到现在为止还挺好。现在我没有为我的int硬编码“std::unordered_map”,而是尝试将其更改为:unordered_map<decltype(arr.front()),decltype(dis)> S;unordered_map<decltype(arr)::value_type,decltype(dis)> S;unordered_map<decltype(arr[0]),decltype(dis)> S;

似乎没有工作。在这里使用decltype()的正确语法是什么?

c++ templates decltype argument-deduction
1个回答
2
投票

在这里使用decltype的正确语法是什么?

decltype(arr.front())decltype(arr[0])都可以,但不幸的是,他们都返回了对const int的引用(考虑到arr是一个常量向量)

您必须通过示例删除引用和const

std::unordered_map<
      std::remove_const_t<std::remove_reference_t<decltype(arr.front())>>,
      decltype(dis)> S;

使用::value_type更好(恕我直言),因为你避免了常量,所以你必须只删除引用,所以你可以写

   std::unordered_map<
      std::remove_reference_t<decltype(arr)>::value_type,
      decltype(dis)> S;
© www.soinside.com 2019 - 2024. All rights reserved.