如何确定数组元素的类型?

时间:2014-03-14 16:20:05

标签: c++ arrays c++11 vector

我无法获得元素的类型。此解决方案返回对元素类型的引用。

int arr[] = { 0, 1, 2, 3, 4, 5 };
using arrElemType = decltype(*arr);
vector<arrElemType> vec(std::cbegin(arr), std::cend(arr));

3 个答案:

答案 0 :(得分:10)

尝试以下

using arrElemType = std::remove_reference<decltype( *arr )>::type;

typedef std::remove_reference<decltype( *arr )>::type arrElemType;

您需要包含标题<type_traits>

答案 1 :(得分:2)

C ++ 11及更高版本中的标准方法是使用std::remove_all_extents

#include <type_traits>

int arr[] = { 0, 1, 2, 3, 4, 5 };
using arrElemType = std::remove_all_extents<decltype(arr)>::type;
vector<arrElemType> vec(std::cbegin(arr), std::cend(arr));

答案 2 :(得分:-1)

如果为元素定义了 + 运算符:

int arr[] = { 0, 1, 2, 3, 4, 5 };
using arrElemType = decltype(+arr[0]); // + is the key
vector<arrElemType> vec(std::cbegin(arr), std::cend(arr));
  • <type_traits> 标题不是必需的。
  • +arr[0] 表达式变为 prvalue,decltype 推导出为 T。
  • decltype(arr[0]) 给出了 T&,这在这里是不可取的。
  • 在 decltype 中不访问数组元素,因此使用 arr[1000] 没有关系。

请参阅 compiler explorer 上的代码。